Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » Архив » STM32F030F4 + SPI1 in half-duplex mode


STM32F030F4 + SPI1 in half-duplex mode

Сообщений 1 страница 5 из 5

1

Возникла необходимость поработать в этом режиме и я был удивлен как себя ведет SPI в режиме приема. При переходе в режим прием данных начинает валить в бесконечности клок при чем сам по себе, в регистр DR даже ничего не писал. Работать с этим чудом просто невозможно, или я накосячил? кто-то пробовал работать в таком режиме? CS (NSS) не использую т.к. его нет в том интерфейсе что хочу эмулировать. (внутри активен софтово). Печалит это меня, а в open-drain частоту данных особо не поднять. Нужен совет дня.

2

Или второй вопрос как из полного дуплекса сделать качественный полудуплекс схемотически, такой чтобы под 24 МГц нормально работал.

3

я делаю так
1) включаю DMA
2) дергаю CS софтово
3) включаю SPI
4) набираю буфер

в обработчики DMA выключаю DMA и ставлю флаг. в мейне по флагу обрабатываю буффер и отключаю SPI,поднимаю СS.  потом делаю паузу и повторяю все.

______
можно в полном дуплексе делать, при этом ножку MOSI можно не конфигурировать . просто в момент когда нужно принять байт , пишем в DR, ждем  флаг приема SPI - SPI_SR_RXNE и читаем DR.

в полном дуплексе тактирование начинается только в момент записи DR. если в полудуплексе, то тактирование начинается сразу, после включения SPI

не знаю на сколько это правильно, но у меня работает.

Отредактировано Atomic-dm (2019-07-25 11:06:10)

4

Спасибо за ответ, я так понимаю что ножка NSS в полудуплексе тоже двунаправленная? т.к. при передаче мы управляем слейвом, а во время приема слейв запрашивает клок для данных. А с какими таймингами у вас работает такой вариант? Я бы хотел 1/2 от тактирования модуля, думаю ничего не успеет отключить мастера, буду делать из полного дуплекса полудуплекс, во время приема отключу MOSI, попробую так. Мне то всего 3 бита принять и потом еще 4 байта. Делаю SWD. (ногодрыг работает но это не наш метод)))

5

MasterElectric написал(а):

Спасибо за ответ, я так понимаю что ножка NSS в полудуплексе тоже двунаправленная? т.к. при передаче мы управляем слейвом, а во время приема слейв запрашивает клок для данных. А с какими таймингами у вас работает такой вариант? Я бы хотел 1/2 от тактирования модуля, думаю ничего не успеет отключить мастера, буду делать из полного дуплекса полудуплекс, во время приема отключу MOSI, попробую так. Мне то всего 3 бита принять и потом еще 4 байта. Делаю SWD. (ногодрыг работает но это не наш метод)))

у меня скорость очень маленькая 8/256 . датчик температуры опрашивается.

кстати глянул в RM (l053, думаю в других сериях также)

" Receive-only mode (RXONLY=1):
The clock signal is generated continuously as long as the SPI is enabled. The only way to
stop the clock is to clear the RXONLY bit or the SPE bit and wait until the incoming
pattern from the MISO pin is finished and fills the data buffer structure, depending on its
configuration."

Software NSS management я обычно выключаю, но опять же из RM интересная штука

NSS output enable (SSM=0,SSOE = 1): this configuration is only used when the
MCU is set as master. The NSS pin is managed by the hardware. The NSS signal
is driven low as soon as the SPI is enabled in master mode (SPE=1), and is kept
low until the SPI is disabled (SPE =0).

NSS output disable (SSM=0, SSOE = 0): if the microcontroller is acting as the
master on the bus, this configuration allows multimaster capability. If the NSS pin
is pulled low in this mode, the SPI enters master mode fault state and the device is
automatically reconfigured in slave mode.
In slave mode, the NSS pin works as a
standard “chip select” input and the slave is selected while NSS line is at low level.


Вы здесь » Микроконтроллеры » Архив » STM32F030F4 + SPI1 in half-duplex mode