2016-04-08 6 views
1

эй, я использую ADS1292 для своего собственного проекта, а сам путаюсь с протоколом SPI.Процедура протокола SPI

Я нашел некоторый код в Интернете, и я обнаружил, что он отправляет и принимает в свое время.

например, я хочу отправить 0xFF на ведомое устройство.

затем он сначала отправляет данные и ждет получения.

И при получении данных он отправляет фиктивный байт, а затем принимает.

Кто-нибудь, пожалуйста, объясните, почему они это делают?

uint8_t sEE_ReadByte(void) 
{ 
    return (sEE_SendByte(sEE_DUMMY_BYTE)); 
} 

uint8_t sEE_SendByte(uint8_t byte) 
{ 
    /*!< Loop while DR register in not empty */ 
    while (SPI_I2S_GetFlagStatus(sEE_SPI, SPI_I2S_FLAG_TXE) == RESET); 

    /*!< Send byte through the SPI peripheral */ 
    SPI_SendData(sEE_SPI, byte); 

    /*!< Wait to receive a byte => I do not understand this point*/ 
    while (SPI_I2S_GetFlagStatus(sEE_SPI, SPI_I2S_FLAG_RXNE) == RESET); 

    /*!< Return the byte read from the SPI bus */ 
    return (uint8_t)SPI_ReceiveData(sEE_SPI); 
} 

ответ

3

Они делают это, потому что это характер шины SPI, и это то, как осуществляется связь с шинами. Смотри:

Передача данных

Каждый SPI тактовый цикл является дуплексной передачи данных. Ведущий посылает бит на вывод MOSI, и ведомое устройство считывает его, в то время как ведомое устройство посылает бит на вывод MISO, и мастер читает его. Эта последовательность верна, даже если вам нужна только однонаправленная передача данных.

Смотреть это изображение (из Википедии) enter image description here

Таким образом, каждый передачи включают два регистра сдвига фиксированного размера (8bit для экс). Один находится в главном устройстве и один в подчиненном. В каждом такте данные смещаются. Если вы продолжите и выберете достаточное количество импульсов (столько, сколько размер регистров), ведущий и ведомый обменяются значениями регистра. Теперь вы можете прочитать данные и продолжить. Конечно, это еще не все. Существует также

конфигурации цепь маргаритки

В этой конфигурации более одного подчиненного устройства, подключенного к одной и той же цепи MISO и MOSI линий. Каждое подчиненное MOSI подключается к MISO предыдущего подчиненного и т. Д. (См. Изображение ниже). При такой конфигурации тактовых импульсов для полного цикла в настоящее время (число устройств) * (СИЗО буферов)

enter image description here

Для получения дополнительной информации вы можете увидеть также wikipedia.

Заключение

В результате вышесказанного. Для того, чтобы мастер отправил байт, он также должен получить байт. Этот байт не имеет значения для связи. Является фиктивным байтом, и мастер отбрасывает его. И для того, чтобы получить байт, он вынужден также передать его. Снова мастер передает фиктивный байт. То же самое верно для подчиненной части коммуникации.

hoo2

 Смежные вопросы

  • Нет связанных вопросов^_^