Процесс чтения содержимого EEPROM, показанный на Рис. 12.27, б, немного сложнее. Как и в предыдущем случае, транзакция начинается посылкой адреса устройству. Затем ведущий формирует состояние ПОВСТАРТ, после чего повторно передает управляющий байт с установленным битом R/W¯, свидетельствующий о том, что ведущий будет работать в качестве приемника данных. После этого микросхема EEPROM отсылает байт, расположенный по адресу, указанному ведущим, который при получении байта выставляет подтверждение. Процесс передачи и приема байтов (с постоянным инкрементированием адреса) будет продолжаться до тех пор, пока ведущий в ответ на очередной байт не выставит NACK. После этого ведомый освободит шину и ведущий сможет сформировать состояние СТОП. Если первый пакет, содержащий адрес ячейки памяти, был опущен, то чтение начнется с адреса, на единицу большего того, к которому производилось последнее обращение.
Программа, код которой приведен в Программе 12.19, в точности выполняет все операции, показанные на Рис. 12.27. После посылки начального адреса h’00’ микроконтроллер переходит в режим чтения и считывает три последовательно расположенных байта из EEPROM-памяти. Чтение завершается возвратом NACK с последующим формированием состояния СТОП. Поскольку все три байта расположены друг за другом, используется автоматическое инкрементирование адреса. После инкрементирования 3-байтного значения оно передается обратно в EEPROM после повторной передачи адреса 1-й ячейки (h’00’). Процесс завершается формированием состояния СТОП.