Думаю, будет проще начать с вашего последнего вопроса.
Why must SPI send and receive at the same time?
Простой ответ заключается в том, что это часть протокола. Когда данные передаются по линии MOSI от ведущего устройства к ведомому, данные в буфере ведомого устройства перемещаются к ведущему устройству по линии MISO. Это позволяет аппаратному обеспечению использовать один регистр в каждом устройстве как для отправляемых, так и для принимаемых данных. Вот хорошая схема процесса:
http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
Не самый простой ответ заключается в том, что SPI не является четко определенным стандартом. Существуют различные типы реализации в зависимости от используемых вами устройств. Существует даже вариант, в котором линии MOSI и MISO объединены и используются двунаправленно (3-wire SPI). Тем не менее, большинство реализаций, с которыми я имел дело, отправляют и получают по двум разным линиям, и это, как правило, стандартная методология.
What is the difference between QSPI and SPI on usage?
QSPI или Quad SPI на самом деле не придерживаются стандартной методологии и ломают концепцию отправки и получения одновременно. Он использует четыре двунаправленных линии ввода-вывода для отправки и получения данных и часто используется для приложений памяти (поскольку он быстрее, чем SPI). С QSPI вы не отправляете и не получаете одновременно.
If I write a driver based on QSPI, will it work?
Безусловно! Вам просто нужно ознакомиться с оборудованием, которое вы используете. Опять же, SPI очень отличается от Quad SPI, и вы часто можете найти аппаратные реализации, которые очень упрощают использование QSPI. Например, ваш Zynq 7000 имеет контроллер QSPI, который имеет множество функций для упрощения процесса кодирования. Он также будет работать в «устаревшем режиме», который действует как обычный контроллер SPI. Кроме того, Zynq 7000 имеет два других стандартных контроллера SPI, которые не настроены для QSPI. Я настоятельно рекомендую вам прочитать техническую документацию здесь:
http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf
If I write a driver from scratch, what is the basic procedure?
Это очень зависит от оборудования. Я сделал краткий обзор вашего оборудования, но подробное описание шагов заняло бы слишком много времени. Однако в техническом руководстве для вашего устройства содержатся отличные пошаговые инструкции по настройке и использованию как контроллеров QSPI, так и контроллеров SPI. Вот пример из раздела SPI:
17.3.1 Последовательность запуска
Пример: последовательность запуска
- Сброс контроллера: Подтвердите и отмените сбросы Ref и CPU_1x, см. раздел 17.4.1 Сбросы.
- Запрограммируйте часы: Запрограммируйте SPI_Ref_Clk, см. раздел 17.4.2 Часы.
- Маршрутизация сигналов Tx/Rx: См. раздел 17.5 Интерфейсы ввода-вывода.
- Конфигурация контроллера: См. раздел 17.3.2 Конфигурация контроллера.
- Конфигурация прерывания: Настройте ISR для обработки условий прерывания. Простейший ISR считывает данные из RxFIFO и записывает содержимое в TxFIFO. Контроллер прерываний PS описан в Главе 7, Прерывания. Механизм прерывания для контроллера SPI описан в разделе 17.3.5 Процедура обслуживания прерываний.
Начать передачу данных:
Выбор работы в ведущем режиме: ручной/автоматический запуск и SS, см. раздел 17.3.3 «Передача данных в ведущем режиме».
Работа в ведомом режиме, см. раздел 17.3.4 Передача данных в ведомом режиме.
Надеюсь, это поможет!
person
embedded_guy
schedule
21.05.2013