Руководство пользователя MSP430 (1041606), страница 31
Текст из файла (страница 31)
При передаче каждого бита ведущим устройством генерируется один тактовый импульс. Модуль I2C работает с данными, организованными побайтно. Сначала перемещается старший значащий разряд, как показано на рис.15-3.
Первый, после условия «СТАРТ», байт состоит из 7-разрядного адреса ведомого и бита R/nonW. Когда R/nonW=0, ведущий передает данные ведомому. Когда R/nonW=1, ведущее устройство принимает данные от ведомого. Бит ACK посылается приемником после каждого байта на 9-ом такте SCL.
Рис.15-3. Передача данных модулем I2C
Данные на SDA должны быть неизменны в течение периода высокого уровня SCL, как показано на рис.15-4. Высокий и низкий уровень SDA может изменяться, только когда SCL имеет низкий уровень, в противном случае будет сгенерировано условие «старт» или «стоп».
Рис.15-4. Передача бита на шине I2C
15.2.2 Условия «СТАРТ» и «СТОП» I2C
Условия «СТАРТ» и «СТОП», показанные на рис.15-5, генерируются ведущим. Условие «СТАРТ» возникает при переходе с высокого уровня на низкий на линии SDA, когда SCL имеет высокий уровень. Условие «СТОП» появляется при переходе с низкого уровня на высокий на линии SDA при высоком уровне на SCL. Бит занятости I2CBB устанавливается после условия «СТАРТ» и сбрасывается после «СТОП».
Рис.15-5. Условия «СТАРТ» и «СТОП» модуля I2C
15.2.3 Режимы адресации I2C
Модуль I2C поддерживает 7-разрядный и 10-разрядный режимы адресации.
7-разрядная адресация
В 7-разрядном формате адресации, показанном на рис.15-6, первый байт – это 7-разрядный адрес ведомого и бит R/nonW. Бит ACK посылается приемником после каждого байта.
Рис.15-6. 7-разрядный формат модуля I2C
10-разрядная адресация
В 10-разрядном адресном формате, показанном на рис.15-7, первый байт содержит 11110b плюс два старших бита 10-разрядного адреса ведомого и бит R/nonW. Бит ACK посылается приемником после каждого байта. Следующий байт содержит оставшиеся 8 бит 10-разрядного адреса ведомого, завершающиеся битом ACK и 8-разрядными данными.
Рис.15-7. 10-разрядный адресный формат модуля I2C
Повторные условия «СТАРТ»
Направление потока данных на SDA может быть изменено ведущим без первоначального останова передачи, что приведет к повторению условия «СТАРТ». Это вызовет «РЕСТАРТ». После выполнения «РЕСТАРТА» адрес ведомого отправляется снова, но уже с новым направлением данных, заданным битом R/nonW. Условие «РЕСТАРТ» показано на рис.15-8.
Рис.15-8. Формат адресации модуля I2C с повторным условием «СТАРТ»
15.2.4 Режимы работы модуля I2C
Модуль I2C работает в режимах «ведущий передатчик», «ведущий приемник», «ведомый передатчик» или «ведомый приемник».
Режим ведущего
В режиме ведущего выполнение передачи и приема управляется с помощью битов I2CRM, I2CSTT и I2CSTP, как описано в таблице 15-1. Режим ведущего приемника вводится установкой I2CTRX=0 после передачи адресного байта ведомого и установленного бита R/nonW. Режимы ведущего передатчика и ведущего приемника показаны на рис.15-9 и рис.15-10.
SCL удерживается в низком состоянии, когда необходимо вмешательство ЦПУ после передачи байта.
Таблица 15-1. Функционирование ведущего
I2CRM | I2CSTP | I2CSTT | Условие или активность шины |
X | 0 | 0 | Модуль I2C в режиме ведущего, но свободен. Условия «старт» и «стоп» не генерируются. |
0 | 0 | 1 | Активность инициируется установкой I2CSTT. I2CNDAT используется для установки длины передачи. Условие «стоп» автоматически не генерируется после перемещения байт, количество которых задано в I2CNDAT. Программное обеспечение должно установить I2CSTP для генерации условия «стоп» в конце передачи. |
0 | 1 | 1 | I2CNDAT используется для установки длины передачи. Установкой I2CSTT инициируется активность. Условие «стоп» автоматически генерируется после передачи байт, количество которых задано I2CNDAT. |
1 | 0 | 1 | I2CNDAT не используется для установки длины передачи. Длиной передачи должно управлять программное обеспечение. Установка бита I2CSTT инициирует активность. Для инициирования условия «стоп» или останова активности программное обеспечение должно установить бит I2CSTP. Этот режим используется, если необходимо передать более 256 байт. |
0 | 1 | 0 | Установка бита I2CSTP генерирует условие «стоп» на шине после отправки количества байт, заданного I2CNDAT или немедленно, если уже передано количество байт, заданное I2CNDAT. |
1 | 1 | 0 | Установка бита I2CSTP генерирует условие «стоп» на шине после завершения текущей передачи или немедленно, если текущая передача не активна. |
1 | 1 | 1 | Зарезервировано, шина неактивна. |
Диаграмма состояний I2C
Рис.15-9. Режим ведущего передатчика, I2CWORD = 1
Рис.15-10. Режим ведущего приемника, I2CWORD = 1
Арбитраж
Если два или более передатчиков одновременно начинают передачу на шине, запускается процедура арбитража. На рис.15-11 поясняется процедура арбитража между двумя устройствами. Процедура арбитража использует данные, представленные на SDA конкурирующими передатчиками. Первый ведущий передатчик, генерирующий логическую единицу, отвергается противостоящим ведущим, генерирующим логический сигнал низкого уровня. Процедура арбитража дает приоритет устройству, которое передает поток последовательных данных с наименьшим двоичным значением. Ведущий передатчик, потерявший арбитраж, переключается в режим ведомого приемника и устанавливает флаг потери арбитража ALIFG. Если два или более устройства посылают одинаковые первые байты, арбитраж продолжается на последующих байтах.
Рис.15-11. Процедура арбитража между двумя ведущими передатчиками
Если выполняется процедура арбитража, когда на SDA повторяются условия «СТАРТ» или «СТОП», ведущие передатчики, вовлеченные в арбитраж, должны послать повторные условия «СТАРТ» или «СТОП» в том же самом месте в формате фрэйма. Арбитраж не разрешается между:
-
Повторным условием «СТАРТ» и битом данных
-
Условием «СТОП» и битом данных
-
Повторным условием «СТАРТ» и условием «СТОП»
Режим ведомого
В режиме ведомого операции передачи и приема управляются автоматически модулем I2C. Режимы ведомого передатчика и ведомого приемника показаны на рис.15-12 и рис.15-13.
В режиме ведомого приемника биты последовательных данных принимаются на SDA и сдвигаются по тактовым импульсам, генерируемым ведущим устройством. Ведомое устройство не генерирует тактовый сигнал, но может удерживать линию SCL в состоянии низкого уровня, если после приема байта необходимо вмешательство ЦПУ.
В режим ведомого передатчика можно войти только из режима ведомого приемника. Вход в режим ведомого передатчика происходит, если байт адреса ведомого, переданный ведущим, является таким же адресом, как и его собственный и был послан установленный бит R/W, указывая на запрос отправки данных ведущему. Ведомый передатчик сдвигает последовательные данные из устройства на SDA по импульсам тактирования, генерируемым ведущим устройством. Ведомое устройство не генерирует тактовых сигналов, но может удерживать линию SCL в состоянии низкого уровня, если после передачи байта необходимо вмешательство ЦПУ.
Рис.15-12. Ведомый передатчик, I2CWORD=1
Рис.15-13. Ведомый приемник, I2CWORD=1
15.2.5 Регистр данных I2CDR шины I2C
Регистр I2CDR может быть доступен как 8-разрядный или 16-разрядный регистр, что определяется битом I2CWORD. Функции регистра I2CDR описаны в таблице 15-2.
Таблица 15-2. Функции регистра I2CDR
I2CWORD | I2CTRX | Функция I2CDR |
0 | 1 | Режим передачи байта: Используется только младший байт. Байт дважды буферизируется. Если новый байт записан до передачи предыдущего байта, новый байт ожидает во временном буфере до момента защелкивания в младшем байте регистра I2CDR. Когда I2CDR доступен, устанавливается бит TXRDYIFG. |
0 | 0 | Режим приема байта: Используется только младший байт. Байт дважды буферизируется. Если новый байт принят до прочтения предыдущего байта, новый байт ожидает во временном буфере до момента защелкивания в младшем байте регистра I2CDR. Когда I2CDR готов для чтения, устанавливается бит RXRDYIFG. |
1 | 1 | Режим передачи слова: Первым передается младший байт слова, затем старший байт. Регистр дважды буферизируется. Если новое слово записано до передачи предыдущего слова, новое слово ожидает во временном буфере до момента защелкивания в регистре I2CDR. Когда I2CDR доступен, устанавливается бит TXRDYIFG. Если последние передаваемые данные состоят только из одного байта, старший байт должен содержать нуль. Когда I2CDR готов к доступу, устанавливается бит TXRDYIFG. |
1 | 0 | Режим приема слова: Первым принимается младший байт слова, затем старший байт. Регистр дважды буферизируется. Если новое слово принято до прочтения предыдущего слова, новое слово ожидает во временном буфере до момента защелкивания в регистре I2CDR. Если последним был принят один байт, тогда старший байт содержит нуль, устанавливается бит I2CSDB. Когда I2CDR готов к доступу, устанавливается бит RXRDYIFG. |
Опустошение при передаче
В режиме ведущего опустошение происходит, когда сдвиговый регистр передачи и буфер передачи пусты, а I2CNDAT > 0. В режиме ведомого опустошение происходит, когда сдвиговый регистр передачи и буфер передачи пусты, а внешний ведущий I2C все еще запрашивает данные. Когда происходит опустошение при передаче, устанавливается бит I2CTXUDF. Запись данных в регистр I2CDR или сброс бита I2CEN сбрасывает I2CTXUDF. I2CTXUDF используется только в режиме передачи.
Переполнение при приеме
Переполнение при приеме происходит, когда сдвиговый регистр приема и буфер приема заполнены. Когда происходит переполнение при приеме, устанавливается бит I2CRXOVR. Потери данных не происходит, поскольку в этом случае линия SCL удерживается в состоянии низкого уровня, которое приостанавливает дальнейшую активность на шине. Чтение регистра I2CDR или сброс бита I2CEN сбрасывает бит I2CRXOVR. Бит I2CRXOVR используется только в режиме приема.
15.2.6 Генерация тактовых сигналов I2C и синхронизация