2016-04-15 5 views
-1

Я передаю 10 байт от ведущего к подчиненному по SPI + DMA с HAL. Как я могу проверить, сколько байтов у получателя в этот момент, и если все 10 байтов не были получены, то останавливает процесс снова. Поскольку мастер после отправки 10 байтов должен получить ответ от ведомого устройства, но если ведомый не получил полный байт, он ждет и система переходит в indifinite .......HAL SPI DMA проверяет, сколько байтов получено во время работы

Любая идея?

+0

В протоколе протокола SPI принимается ответ одновременно с передачей пакета. И для получения одного байта SPI вам нужно передать один байт. Если команда завершена, но ведомый должен отправить более длинный запрос, вы должны отправить фиктивные байты. – imbearr

ответ

0

«Я передаю 10 байт от ведущего к подчиненному по SPI + DMA с HAL». Поскольку вы используете DMA, вы просто настраиваете размер передачи на API-интерфейс приемника DMA и включаете прерывание DMA. Когда DMA получает 10 байт, приемник DMA завершит перемещение, за исключением того, что отправитель передает менее 10 байтов.

«Поскольку хозяин после отправки 10 байтов должен получить ответ от ведомого устройства, но если подчиненный не получил полный байт, он ждет, а система войдет в indifinite .......» Вы можете решить эту проблему, используя тайм-аут в подчиненной стороне.