F00-17 (1041601), страница 29
Текст из файла (страница 29)
20024.2002; Rev. 1.4C8051F000/1/2/5/6/7C8051F010/1/2/5/6/7Таблица 16.1. Коды состояния модуля SMBusКодсостояния(SMB0STA)0x00РежимСостояние модуля SMBusОшибка шины (т.е. некорректный START, некорректный STOP, …)0x180x200x280x300x380x400x480x500x580x600x68Все режимыВедущийпередатчик/приемникВедущийпередатчик/приемникВедущий передатчикВедущий передатчикВедущий передатчикВедущий передатчикВедущий передатчикВедущий приемникВедущий приемникВедущий приемникВедущий приемникВедомый приемникВедомый приемник0x700x78Ведомый приемникВедомый приемник0x80Ведомый приемник0x88Ведомый приемник0x90Ведомый приемник0x98Ведомый приемник0xA0Ведомый приемник0xA80xB0Ведомый передатчикВедомый передатчик0xB80xC00xC8Ведомый передатчикВедомый передатчикВедомый передатчикВедомыйпередатчик/приемникВсе режимы0x080x100xD00xF84.2002; Rev.
1.4Передан бит START.Передан бит «повторный START».Передан адрес ведомого + W. Получен ACK.Передан адрес ведомого + W. Получен NACK.Передан байт данных. Получен ACK.Передан байт данных. Получен NACK.Потерян арбитраж.Передан адрес ведомого + R. Получен ACK.Передан адрес ведомого + R. Получен NACK.Получен байт данных. Передан ACK.Получен байт данных. Передан NACK.Получен собственный адрес ведомого + W. Передан ACK.При передаче в ведущем режиме адреса ведомого + R/W потерянарбитраж.Получен собственный адрес ведомого + W.
Передан ACK.Получен адрес общего вызова (0x00). Передан ACK.При передаче в ведущем режиме адреса ведомого + R/W потерянарбитраж.Получен адрес общего вызова (0x00). Передан ACK.Получен собственный адрес ведомого + W. Получен байт данных.Передан ACK.Получен собственный адрес ведомого + W. Получен байт данных.Передан NACK.Получен адрес общего вызова (0x00). Получен байт данных.Передан ACK.Получен адрес общего вызова (0x00). Получен байт данных.Передан NACK.Получен бит STOP или «повторный START», когда устройствоадресуется в качестве ведомого.Получен собственный адрес ведомого + R.
Передан ACK.При передаче в ведущем режиме адреса ведомого + R/W потерянарбитраж.Получен собственный адрес ведомого + R. Передан ACK.Передан байт данных. Получен ACK.Передан байт данных. Получен NACK.Передан последний байт данных (AA=0). Получен ACK.Истек таймаут высокого уровня на линии SCL, определяемыйзначением регистра SMB0CR (при FTE=1)Простой (ожидание)CYGNAL Integrated Products, Inc. 2002Page 121C8051F000/1/2/5/6/7C8051F010/1/2/5/6/717.
МОДУЛЬ SPIМодуль SPI обеспечивает доступ к четырех-проводной полнодуплексной последовательной шине.SPI поддерживает подключение нескольких ведомых устройств к ведущему устройству с помощью однойшины. Отдельный сигнал выбора ведомого (NSS) используется для выбора ведомого устройства иразрешения обмена данными между ведущим и выбранным ведомым. Кроме этого возможна работанескольких ведущих на одной шине.
Имеется схема обнаружения конфликтов на случай, если два или болееведущих попытаются передать данные одновременно. Модуль SPI может работать как в ведущем, так и введомом режимах. Когда модуль SPI настроен как ведущий, максимальная скорость передачи данных(бит/сек) равна половине системной тактовой частоты.Когда модуль SPI настроен как ведомый, максимальная скорость передачи данных (бит/сек) дляполнодуплексного режима передачи равна 1/10 системной тактовой частоты, при условии, что сигналы отведущего SCK, NSS и последовательные входные данные синхронизированы с системной тактовой частотой.Если сигналы от ведущего SCK, NSS и последовательные входные данные асинхронны, то максимальнаяскорость передачи данных (бит/сек) должна быть меньше 1/10 системной тактовой частоты.
В особом случае,когда ведущему требуется только передавать данные ведомому и не требуется принимать от него данные (т.е.полудуплексный режим), ведомый модуль SPI может принимать данные с максимальной скоростью (бит/сек),равной системной тактовой частоте. Это справедливо при условии, что сигналы от ведущего SCK, NSS ипоследовательные входные данные синхронизированы с системной тактовой частотой.Рисунок 17.1. Структурная схема модуля SPISFR шинаSPI0CKRSCR7SYSCLKSCR6SCR5SCR4SCR3SCR2SPI0CFGSCR1SCR0CKPHAC B B B FK C C C RP 2 1 0 SO2LSPI0CNFRS1FRS0SPIFWCOLMODFRXOVRNTXBSYSLVSELMSTENSPIENЛогикасчетчикабитовЛогика делителятактовой частотыЛОГИКА УПРАВЛЕНИЯ МОДУЛЯ SPIУправлениетрактом данныхТактирование шины SPI(Ведущий режим)Прерывание отмодуля SPIИнтерфейсуправлениявыводамиПередаваемыеданныеSPI0DATСдвиговый регистр7 6 5 4 3 2 1 0Регистр принимаемых данныхПринимаемыеЛогикауправлениявыводамиMOSIMISOМАТРИЦАSCKПортввода/выводаданныеNSSЧтениеSPI0DATЗапись вSPI0DATSFR шинаPage 122CYGNAL Integrated Products, Inc.
20024.2002; Rev. 1.4C8051F000/1/2/5/6/7C8051F010/1/2/5/6/7Порт ввода/выводаПорт ввода/выводаПорт ввода/выводаРисунок 17.2. Подключение к шине SPINSSNSSNSSВедомоеустройствоВедомоеустройствоВедомоеустройствоVDDMISOMOSISCKВедущееустройство17.1. Описание сигналовНиже описаны четыре сигнала, используемые интерфейсом SPI (MOSI, MISO, SCK, NSS).17.1.1. Выход ведущего, вход ведомогоСигнал MOSI (master-out, slave-in - «выход ведущего, вход ведомого») является выходом данныхведущего устройства и входом данных ведомых устройств. Он используется для последовательной передачиданных от ведущего к ведомому. Данные передаются старшими значащими разрядами вперед.17.1.2.
Вход ведущего, выход ведомогоСигнал MISO (master-in, slave-out - «вход ведущего, выход ведомого») является выходом данныхведомого устройства и входом данных ведущего устройства. Он используется для последовательнойпередачи данных от ведомого к ведущему. Данные передаются старшими значащими разрядами вперед.Когда ведомое устройство не выбрано, его модуль SPI переводит вывод MISO в высокоимпедансноесостояние.17.1.3. Тактовые импульсыСигнал SCK (serial clock – «импульсы тактирования последовательного интерфейса») являетсявыходом ведущего устройства и входом ведомых устройств.
Он используется для синхронизации обменаданными между ведущим и ведомым устройствами по линиям MOSI и MISO.17.1.4. Выбор ведомогоСигнал «Выбор ведомого» (NSS) является входом, используемым для выбора модуля SPI,работающего в ведомом режиме, или для отключения модуля SPI, работающего в ведущем режиме. Введомом режиме он удерживается на низком уровне в течение всего сеанса обмена данными.4.2002; Rev. 1.4CYGNAL Integrated Products, Inc.
2002Page 123C8051F000/1/2/5/6/7C8051F010/1/2/5/6/717.2. Режимы работыТолько ведущее устройство SPI может инициировать сеанс обмена данными. Модуль SPIпереводится в ведущий режим работы установкой в 1 флага включения ведущего режима (MSTEN,SPI0CN.1). Если модуль SPI настроен как ведущий, то запись байта данных в регистр данных модуля SPI(SPI0DAT) запустит сеанс обмена данными. Ведущий SPI сразу же начнет последовательно сдвигать данныена линию MOSI, выдавая тактовые импульсы на линию SCK.
Флаг SPIF (SPI0CN.7) устанавливается в 1 приокончании передачи. Если прерывания разрешены, то при установке флага SPIF генерируется запроспрерывания. Ведущий SPI можно настроить таким образом, чтобы в процессе обмена выдвигать в линию(принимать с линии) от одного до восьми бит, что позволяет ему работать с ведомыми устройствами,имеющими различную длину слова данных.
Выбор количества сдвигаемых бит осуществляется битамиSPIFRS регистра конфигурации модуля SPI (SPI0CFG.[2:0]).В полнодуплексном режиме в то время, когда ведущий SPI передает данные ведомому по линииMOSI, адресуемый ведомый передает содержимое своего регистра сдвига ведущему SPI по линии MISO. Байтданных, полученный от ведомого, заменяет данные в регистре данных ведущего.
Поэтому флаг SPIF являетсякак флагом окончания передачи, так и флагом готовности принимаемых данных. Обмен данными в обоихнаправлениях синхронизирован с тактовыми импульсами, генерируемыми ведущим. На рис.17.3 показанофункционирование ведущего SPI и адресуемого ведомого в полнодуплексном режиме работы.Рисунок 17.3.
Полнодуплексный режим работыВЕДОМОЕ УСТРОЙСТВОВЕДУЩЕЕ УСТРОЙСТВОMOSIMOSIMISOMISOРегистр сдвига модуля SPI7 6 5 4 3 2 1 0Регистр сдвига модуля SPI7 6 5 4 3 2 1 0VDDприемный буфергенераторскоростиобменаNSSNSSSCKSCKприемный буферPx.yРегистр данных модуля SPI имеет двойную буферизацию по чтению, но не по записи. Если будетпредпринята попытка записи в регистр SPI0DAT при выполнении передачи данных, то будет установлен в 1флаг WCOL (SPI0CN.6) и операция записи игнорируется. Текущая передача данных будет продолжена, непрерываясь.
При чтении регистра данных модуля SPI на самом деле читается приемный буфер. Еслиприемный буфер все еще содержит непрочитанные данные от предыдущей передачи, а последний биттекущей передачи сдвигается в регистр сдвига модуля SPI, то произойдет переполнение приемника иустановится в 1 флаг RXOVRN (SPI0CN.4). Новые данные не передаются в приемный буфер, позволяяпрочитать ранее принятые данные. Байт данных, вызвавший переполнение приемника, теряется.Когда модуль SPI включен и не настроен как ведущий, он будет функционировать как ведомый SPI.Другое устройство SPI, работающее в режиме ведущего, будет инициировать сеанс обмена путем выдачи налинию NSS сигнала с низким логическим уровнем.
Затем ведущий выдает данные из регистра сдвига налинию MOSI, используя генерируемые им тактовые импульсы. Флаг SPIF устанавливается в 1 по окончаниипередачи данных (когда на линии NSS установится сигнал с высоким уровнем). Ведомый может загрузитьсвой регистр сдвига следующим байтом данных, записав его в регистр данных модуля SPI. Ведомый долженпроизвести запись в регистр данных не менее чем за один тактовый цикл SPI до того, как ведущий начнетследующую передачу. Иначе будет передан байт данных, уже имеющийся в регистре сдвига ведомого.На одной шине могут сосуществовать несколько ведущих. Флаг ошибки режима (MODF, SPI0CN.5)устанавливается в 1, если модуль SPI настроен как ведущий (MSTEN = 1) и его сигнал выбора ведомого NSSимеет низкий логический уровень.