2.7.3.2 Block Write (Auto Increment Mode)

The MCP16503 can receive multiple data bytes after a single address byte and automatically increments its register pointer to block fill internal volatile registers. This command writes the first data byte to register that is specified through the command byte and all the following data bytes to the subsequent registers.

Byte data are latched after individual bytes are received, so multi-byte transfers could be corrupted if interrupted mid-stream.

The Block/Auto increment write command is as follows:

  1. Send START sequence
  2. Send 7-bit target address
  3. Send the R/W bit – 0 to indicate a write operation
  4. Wait for Acknowledge from the target
  5. Send the command byte – First register address that needs to be written
  6. Wait for acknowledge from the target.
  7. Receive the 8-bit data from the host and write it to the target register indicated in step 5 starting from MSB.
  8. Acknowledge from the target.
  9. Receive the 8-bit data from the host and write it to the next target register address, starting from MSB.
  10. Acknowledge from the target.
  11. Repeat steps 9 and 10 until the entire data is sent.
  12. Send STOP sequence.
Figure 2-13. I2C Block Write

In Block Write, the register order will be automatically incremented by one step, regardless of the register order. So, for example after writing to register location 0x15, the next register to be written will be 0x16, not 0x20.

Writing to non-existent or not accessible registers addresses will still generate an ACK by the MCP16503 after the command byte, but it will have no effect.

Note that if the host keeps writing data beyond the last register location, the MCP16503 will still generate an ACK on each received byte, but those data will not have any effect on the MCP16503 (i.e. disregarded). There is no register address wrap-around.