29.6 Функциональное описание
29.6.1 Режимы работы
Интерфейс может работать в режиме ведущего или в режиме ведомого.
Работа в режиме ведущего задается записью бита MSTR в регистре режима (Mode Register). Выводы от NPCS0 до NPCS3 конфигурируются для работы на выход, вывод SPCK используется для выдачи синхронизирующего сигнала, линия MISO заводится на приемник, и линия MOSI управляется для выдачи сигналов на ведомое устройство.
Передача данных программируется одинаково для всех режимов. Различие в режимах заключается в том, что генератор тактовой частоты передачи активируется только в устройстве, конфигурированном в режиме ведущего.
29.6.2 Передача данных
При передаче данных могут использоваться 4 комбинации полярностей и фаз уровней передаваемого сигнала. Полярность тактового сигнала задается установкой бита CPOL в регистре выбора корпуса микросхемы (Chip Select Register). Фаза тактового сигнала задается битом NCPHA. Эти два параметра определяют, на каком из перепадов (срезе или фронте) тактового сигнала будут выдаваться или приниматься данные. Каждый из означенных параметров имеет два возможных состояния, что в сумме дает четыре возможные комбинации, несовместимые друг с другом. Таким образом, для того чтобы пара ведущий - ведомый могла провести обмен данными, необходимо обеспечить одинаковые значения параметров в каждом из них. В том случае, если присутствует несколько ведомых, имеющих разные и неизменяемые конфигурации параметров сигнала передачи, ведущий должен будет каждый раз самостоятельно переконфигурировать настройки параметров на совместимые с настройками каждого из участвующих в обмене ведомых.
В таблице 29-2 отражены соответствующие каждому из четырех режимов значения параметров.
Табл. 29-2. Режимы протокола шины параллельного последовательного интерфейса
Режим ППИ |
CPOL |
NCPHA |
0 |
0 |
1 |
1 |
0 |
0 |
2 |
1 |
1 |
3 |
1 |
0 |
На рис. 29-3 и 29-4 показаны примеры форматов передачи данных
Рис. 29-3. Формат передачи ППИ (NCPHA = 1, 8 бит данных)
Рис. 29-4. Формат передачи ППИ (NCPHA = 0, 8 бит данных)
29.6.3 Работа в режиме ведущего
При использовании в режиме ведущего устройства передача данных по SPI интерфейсу синхронизируется сигналом, вырабатываемым генератором тактовой частоты передачи данных, с программируемыми интервалами синхронизации. Интерфейс полностью управляет передачей данных в обоих направлениях для всех ведомых устройств, подключенных к нему. ППИ интерфейс управляет состоянием линии выбора корпуса (Chip Select), идущей к ведомым устройствам, и состоянием вывода синхронизирующего сигнала передачи данных SPCK.
SPI включает в себя два буферных регистра хранения, передающий Регистр данных (SPI_TDR Transmit Data Register) и Приемный регистр данных (SPI_RDR Receive Data Register), и одиночный Сдвиговый регистр (SPI_SR Shift Register). Наличие собственных независимых регистров хранения позволяет поддерживать необходимую постоянную скорость потока передачи данных.
Если SPI разрешен, передача начинается при записи процессором данных в регистр данных передатчика (Transmit Data Register/SPI_TDR). Эти данные немедленно передаются в сдвиговый регистр, и передача по шине SPI таким образом начинается. Одновременно с выдачей данных на линию MOSI из сдвигового регистра, осуществляется опрос линии MISO и побитная передача полученных данных в сдвиговый регистр. Это означает, что передача происходит вместе и только одновременно с приемом.
Перед записью в регистр данных передатчика должна быть произведена запись в поле PCS для выбора ведомого устройства.
Если во время передачи в регистр данных передатчика записываются новые данные, они будут храниться в нем, пока текущая передача не будет завершена. После этого полученные данные передаются из сдвигового регистра в регистр данных приемника, данные из регистра данных передатчика загружаются в сдвиговый регистр и начинается новый сеанс передачи.
Состояние передачи данных, записанных в регистр данных передатчика в сдвиговый регистр, отображается состоянием бита TDRE (опустошение регистра данных передатчика) в регистре состояния SPI (SPI_SR). Этот бит очищается при записи новых данных при записи новых данных в регистр данных передатчика. Бит TDRE используется для инициализации канала передачи контроллера ПДП периферии.
Окончание передачи отображается изменением состояние флага TXEMTY в регистре состояния SPI_SR. Если задержка передачи для последнего сеанса (DLYBCT), была установлена в отличное от нуля значение, TXEMPTY установится только после окончания этой установленной задержки. Главная синхронизация в это время может быть отключена.
Передача принятых данных из сдвигового регистра регистр данных приемника отображается состоянием бита RDRF (Receive Data Register Full - заполнение регистра данных приемника) в регистре состояния интерфейса ППИ. Бит RDRF очищается, когда принятые данные прочитаны, то есть значение регистра считано.
Если регистр данных приемника не был прочитан перед получением новых данных, устанавливается бит ошибки переполнения (OVRES) в регистре состояния интерфейса. Все то время, пока этот флаг установлен, загрузка данных в регистр данных приемника не производится. Пользователь должен произвести чтение регистра состояния для сброса бита OVRES.
Рис. 29-5 изображает структурную схему интерфейса при работе в режиме ведущего. Рис. 29-6 на странице 258 изображает блок - схему описания обработки сеансов передач.
29.6.3.1 Структурная схема ведущего устройства
Рис. 29-5. Структурная схема ведущего устройства
29.6.3.2 Блок - схема работы в режиме ведущего
Рис. 29-6. Блок - схема работы в режиме ведущего
29.6.3.3 Генерирование синхронизирующего сигнала передачи данных
Тактовая частота последовательного синхронного интерфейса получается делением частоты главной синхронизации на величину от 1 до 255.
Это позволяет добиться максимального значения тактовой частоты передачи данных равной значению частоты главной синхронизации, и минимальной, соответствующей частоте главной синхронизации, деленной на 255.
Установка поля SCBR в 0 запрещена. Инициация передачи при SBCR, установленном в 0, может привести к непредсказуемым результатам.
После перезагрузки значение, записанное в SCBR, составляет 0, и должно быть изменено на другое необходимое допустимое значение перед выполнением первого сеанса передачи.
Делитель может быть установлен независимо для каждой линии выбора корпуса внешних устройств, что должно быть запрограммировано в поле SCBR регистров выбора корпуса. Это позволяет SPI автоматически приспосабливать значение тактовой частоты передачи данных для каждого подключенного периферийного устройства без изменения кода.
29.6.3.4 Задержки передачи
Рис. 29-7 показывает передачу активного уровня между линиями выбора корпуса внешних устройств и последовательные сеансы передач при одном и том же выбранной активной линии.
- Задержка между выборами корпуса программируемая только однократно для каждого состояния сигналов выбора корпуса записью DLYBCS в регистре выбора режима (Mode Register). Позволяет установить задержку между освобождением одной линии выбора корпуса и выбором последующей.
- Задержка перед SPCK, независимо программируемая для каждой линии выбора корпуса записью в поле DLYBS. Позволяет совершать задержанный запуск SPCK после установки соответствующего активного уровня линии выбора корпуса.
- Задержка между последовательными сеансами передач, независимо программируемая для каждой линии выбора корпуса записью в поле DLYBCT. Позволяет совершать задержки между передачами при одной и той же активной линии выбора корпуса.
Эти задержки позволяют интерфейсу согласовывать свою работу с различными подключенными периферийными устройствами, устанавливая необходимую скорость передачи данных и время освобождения линии.
Рис. 29-7. Программируемые задержки
29.6.3.5 Выбор периферийных устройств
Периферийные устройства с последовательным интерфейсом выбираются установкой уровней на линиях c NPCS0 по NPCS3. По умолчанию перед началом и по завершению передачи все сигналы NPCS устанавливаются в высокий уровень.
Выбор периферийного устройства может быть произведен один из двух следующих способов:
- Фиксированный выбор периферийного устройства - интерфейс обменивается данными только с одним периферийным устройством.
- Изменяемый выбор периферийного устройства - обмен данными может совершаться более чем с одним устройством
Фиксированный выбор периферии активируется записью 0 в бит PS регистра выбора режима работы интерфейса (SPI_MR). В этом случае текущее выбранное устройство определяется полем PCS в регистре выбора режима работы, и изменение значения поля PCS в регистре SPI_TDR не оказывает влияния на работу.
Изменяемый выбор периферийного устройства активируется установкой бита PS в 1. Поле PCS в регистре SPI_TDR применяется для выбора текущего периферийного устройства. Это означает, что для каждого нового пакета поступающих данных может быть в любой момент выбрано любое периферийное устройство.
Фиксированный выбор периферии позволяет вести буферизованный обмен данных с единственным периферийным устройством. Применение PDC () является самым оптимальным средством, и размер передачи данных между интерфейсом и памятью может составлять как 8 бит, так и 16 бит. Тем не менее, изменение выбора периферийного устройства приводит к необходимости перепрограммирования регистра управления режимом работы.
Изменяемый выбор периферийного устройства позволяет вести буферизованную передачу данных с различными периферийными устройствами без перепрограммирования содержимого регистра управления режимом работы. Информация записывается в передающий регистр данных словом в 32-битной ширины, и содержит передаваемые данные и номер периферийного устройства, которому они предназначены. При использовании контроллера ПДП периферии (PDC) в этом режиме необходимы 32 - битные буферы, с хранением данных в LSB и полями PCS и LASTXFER в MSB. Интерфейс может управлять количеством бит данных, передаваемых по линиям MISO и MOSI за один сеанс передачи (8 или 16) с помощью регистров управления выбором корпуса. Если исходить из размера выделяемой под буфера памяти, это не самый оптимальный способ, но он предоставляет очень эффективные возможности для обмена данных с несколькими периферийными устройствами без занятия процессора.
29.6.3.6 Декодирование номера выбранного корпуса периферийного устройства
Пользователь может программировать интерфейс на работу с количеством периферийных устройств до 15, производимого путем декодирования с помощью внешней логики состояния 4 линий выбора корпуса NPCS0…NPCS3. Эта возможность может быть включена путем установки в 1 бита PCS-DEC в регистре управления режимом работы (SPI_MR).
При работе без декодирования, интерфейс гарантированно устанавливает активной (низкий уровень) только одну линию выбора корпуса. Если в поле PCS два бита имеют низкий уровень, будет активирована только линия для корпуса с наименьшим номером.
При работе с декодированием интерфейс непосредственно без обработки выводит значение, записанное в поле PCS регистра управления выбором режима работы, или регистра данных передатчика (в зависимости от значения PS).
Интерфейс устанавливает на линиях выбора корпуса по умолчанию значение 0хF (то есть на всех линиях выбора корпуса установлена 1), то есть может быть адресовано только 15 периферийных устройств.
Интерфейс имеет только 4 линии выбора корпуса, а не 15. Как следствие, при активировании декодирования состояния линий, каждый из вариантов выбора линий интерфейса может определить характеристики линий для групп до 4 периферийных устройства. Например, SPI_CRS0 определяет характеристики для периферийных устройств с декодированием выбора корпуса внешней логикой от 0 до 3, соответственно со значениями PCS от 0x0 до 0х3. Таким образом, пользователь должен убедиться в том, что к декодированным линиям выбора корпуса 0…3, 4...7, 8…11, 12…14 подключены совместимые периферийные устройства, способные работать с одними и теми же параметрами передачи.
29.6.3.7 Снятие выбора периферийного устройства
При нормальной работе, как только завершается передача последних данных записанных в передающий регистр данных, на всех линиях NPCS устанавливается высокий уровень. Это может привести к ошибке времени прогона, если процессор слишком долго отвечал на прерывание, может создать сложности при взаимодействии с периферийным устройством, для которого необходимо поддержание активного уровня линии выбора корпуса на все время сеанса передачи.
Для облегчения налаживания связи с такими устройствами регистр управления выбором корпуса может быть запрограммирован установкой состояния бита CSAAT (поддержание активного уровня линии выбора корпуса после завершения передачи) в 1. Это приводит к тому, что уровень на линиях выбора корпуса внешнего устройства на момент предыдущей передачи не снимается по ее завершению, а остается без изменений (низким, то есть активным) до начала следующего сеанса передачи.
Рис. 29-8. Снятие выбора периферийного устройства
29.6.3.8 Определение ошибки режима работы
Ошибка режима работы определяется интерфейсом, работающим в режиме ведущего в случае, если обнаружено, что низкий уровень на линиях NPSC0/NSS пытается выставить другое устройство, объявляющее таким образом, что оно тоже ведущее. Так как этот вывод обычно конфигурируется как открытый сток, очень важно использовать подтягивающий резистор на линии NPCS0. Таким образом, на ней будет гарантированно удерживаться высокий уровень и случайная ошибка режима работы не возникнет.
При определении возникшей ошибки режима работы устанавливается бит MODF регистра состояния интерфейса (SPI_SR), и его значение сохраняется до тех пор, пока содержимое регистра состояния не считывается и не проводится автоматическое запрещение и последующее разрешение работы интерфейса записью 1 в бит SPIEN в регистре управления интерфейса (SPI_CR).
По умолчанию логическая схема определения ошибки режима работы включена. Пользователь может отключить ее установкой бита MODFDIS в регистре выбора режима работы интерфейса (SPI_MR).
29.6.4 Режим ведомого
При работе в режиме ведомого интерфейс производит опрос линии поступающих данных по синхронизирующему сигналу, получаемому по линии синхронизации интерфейса (SPCK).
Интерфейс ожидает появления активного уровня на линии NSS для активации синхронизации от внешнего ведущего устройства. При переходе высокий - низкий уровень на линии NSS синхронизирующий сигнал принимается последовательно - параллельным преобразователем, который производит обработку количества бит, установленного в поле BITS регистра выбора корпуса внешнего устройства 0 (SPI_CSR0). Эти биты обрабатываются в соответствии с настройками фазы и полярности сигнала, установленными соответственно в битах NCPHA и CPOL регистра SPI_CSR0. Следует отметить, что поля BITS, CPOL и NCPHA других регистров выбора корпуса не влияют на работу интерфейса, когда он сконфигурирован для работы в режиме ведомого.
Эти биты выдвигаются наружу через линию MISO и принимаются по линии MOSI.
После завершения обработки всех поступивших бит данных, полученные данные передаются в регистр данных приемника и бит RDRF устанавливается в 1. Если бит RDRF уже имеет высокий уровень при передаче данных, устанавливается бит переполнения и передача данных в регистр данных приемника останавливается.
В самом начале передачи наружу сдвигаются данные, которые находятся в сдвиговом регистре. Если в регистр данных передатчика (SPI_TDR) не записывалось никаких данных, передаются все уже принятые данные. Если никакие данные не записывались с момента последней перезагрузки, передаются нулевые биты, так как сдвиговый регистр перезагрузкой установился в нулевое значение.
Как только первые биты данных записываются в регистр передатчика (SPI_TDR), они немедленно передаются в сдвиговый регистр и происходит установка бита TDRE в 1. При поступлении новых данных они хранятся в регистре данных передатчика до начала передачи, то есть до тех пор, пока не возникнет активный (низкий) уровень сигнала NSS. При этом на входе SPCK должен приниматься сигнал синхронизации. В начале передачи последние данные, записанные в регистр данных передатчика, передаются в сдвиговый регистр и устанавливается высокий уровень бита TDRE. Такая работа интерфейса позволяет производить частые обновления критически важных переменных одиночными передачами.
После этого производится загрузка новых данных из регистра данных передатчика в сдвиговый регистр. В случае, если нет готовых для передачи пакетов, то есть с момента последней загрузки из передающего регистра данных в сдвиговый регистр новой записи в передающий регистр не происходило, содержимое сдвигового регистра не изменяется и ведется постоянная повторная передача последнего по времени полученного пакета.
На Рис. 29-9 изображена структурная схема последовательного синхронного интерфейса при работе в режиме ведомого.
Рис. 29-9. Структурная схема ведомого устройства
|