|
stm32f407 SPI обнаружил косяк |
|
|
|
 |
Ответов
|
Nov 16 2012, 15:14
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
наверное не просто так в RM написано Цитата Note: Do not use the BSY flag to handle each data transmission or reception. It is better to use the TXE and RXNE flags instead.
|
|
|
|
|
Nov 16 2012, 22:37
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Flexz @ Nov 16 2012, 17:14)  наверное не просто так в RM написано Поддерживаю. Для полнодуплексного (даже если только передача нужна) SPI завершение передачи нужно проверять по... RXNE (и забыть о TXE или BSY, т.к. STM32F не поддерживает аппаратное формирование SS в режиме мастера!). Тогда будет абсолютная уверенность, что байт ушел, а следующий его не затрет по пути: ведь пока байт выдвигается по MOSI, входящий байт вдвигается по MISO тем же тактовым сигналом. Это означает, что флаг RXNE все равно возникнет, пусть позже TXE, зато наверняка после последнего такта. Нужно помнить чистить RXNE путем чтения DR перед записью туда: 1. Прочесть DR. 2. Записать в DR байт для передачи. 3. Ждать RXNE (будь-то тупо или путем реакции на прерывание). 4. Перейти к п.1., если еще есть данные для передачи.
Сообщение отредактировал KnightIgor - Nov 16 2012, 22:44
|
|
|
|
|
Jan 9 2013, 14:22
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(AHTOXA @ Nov 19 2012, 18:47)  Кстати, не факт, что после. В зависимости от режима SPI, RXNE может возникать на середине последнего такта (если данные на приёме защёлкиваются по переднему фронту). Вот тут-то наверное и может пригодиться BSY. (Хотя я лично просто делаю несколько nop-ов перед отпусканием CS) Пробую понять SPI от STM32. Действие битов SSM, SSI не соответствует описанным в документации. В Интернете фантазируют, кто во что горазд. Насчет RXNE и BSY. Похоже, они переключаются одновременно в конце передачи. Но задержка на полтакта для программного снятия CS не нужна. Потому что выборка (защелкивание) данных ведомым устройством как раз и произойдет в момент, когда возникнет RXNE. А дальше пусть такт заканчивается, все равно. Главное, чтобы время удержания данных на входе ведомого устройства не оказалось меньше нормы. Но это наносекунды. С учетом работы программы, беспокоиться не о чем. Если же ведомое устройство - какой-нибудь регистр, то нужно правильно выбрать полярность тактов SCK.
|
|
|
|
|
Jan 9 2013, 15:36
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(ViKo @ Jan 9 2013, 17:22)  Пробую понять SPI от STM32. Действие битов SSM, SSI не соответствует описанным в документации. Не совсем понял... что там не так??? Небольшие расхождения есть только в описании SPI STM32F0XX... но здесь простительно, сравнительно новый камень, "злокопипаст" и т.д. ... По SPI STM32F3XX ничего не скажу, не мучал... По остальным сериям - всё работает как положено... Цитата В Интернете фантазируют, кто во что горазд. Да и пусть... Кто не хочет читать даташит - пусть фантазирует... В последнее время темы по SPI просто стараюсь игнорировать... Цитата Насчет RXNE и BSY. Похоже, они переключаются одновременно в конце передачи. Но задержка на полтакта для программного снятия CS не нужна. Потому что выборка (защелкивание) данных ведомым устройством как раз и произойдет в момент, когда возникнет RXNE. А дальше пусть такт заканчивается, все равно. Главное, чтобы время удержания данных на входе ведомого устройства не оказалось меньше нормы. Но это наносекунды. С учетом работы программы, беспокоиться не о чем. Это заблуждения... можно нарваться на непонятный глюк... если напрямую махать регистрами... Проверяем BSY, потом снимаем CS...
|
|
|
|
|
Jan 9 2013, 18:19
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(ViKo @ Jan 9 2013, 21:28)  Я проверяю RXNE. Это - то же самое. Пусть будет "Это - то же самое."... ))) Сами подумайте... по вашему, STM прилепила в SPI "левый", никому не нужный, бит BSY... Так поверьте, это не так... При всей своей кажущейся "простоте и непонятности" у STM получился SPI с довольно таки широкими возможностями...
|
|
|
|
|
Jan 9 2013, 19:09
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(HHIMERA @ Jan 9 2013, 21:39)  Ещё раз... не то же самое!!! Смотрим в книгу... Конец передачи - RXNE и BSY изменяются одновременно. То есть, при проверке окончания передачи можно использовать и тот, и другой биты, с одинаковым успехом. При передаче многобайтовых последовательностей для записи байтов в DR лучше проверять TXE, а конец передачи определять, как сказано выше. Хотя можно записывать байты и по и RXNE, можно и по BSY . Но тогда появятся задержки между передачами байтов. Поскольку CS мы формируем программно, не страшно.
Цитата Просто пришло понимание, что и как работает... и только... Проверим? Для связи STM32F207 с M25PE40 (мастер и слейв, соответственно, пишу для полного понимания) мне пришлось программировать SPI следующим образом. Вывод NSS я прицепил на /S памяти, рассчитывая управлять аппаратно. Но не получилось. Пришлось использовать, как GPIO. CODE /* SPI1 -- связь с SFM M25PE40 8-bit, MSB first, SPEn, Fpclk2 / 4 (15 MHz), Master, CPOL=0, CPHA=0 */ SPI1->CR1 = SPI_CR1_CPHA * 0 | // Clock Phase SPI_CR1_CPOL * 0 | // Clock Polarity SPI_CR1_MSTR * 1 | // Master Selection SPI_CR1_BR_0 * 1 | // Baud Rate Control - fpclk2 / 4 = 15 MHz SPI_CR1_BR_1 * 0 | // SPI_CR1_BR_2 * 0 | // SPI_CR1_SPE * 1 | // SPI Enable SPI_CR1_LSBFIRST * 0 | // Frame Format SPI_CR1_SSI * 1 | // Internal slave select SPI_CR1_SSM * 1 | // Software slave management SPI_CR1_RXONLY * 0 | // Receive only SPI_CR1_DFF * 0 | // Data Frame Format SPI_CR1_CRCNEXT * 0 | // Transmit CRC next SPI_CR1_CRCEN * 0 | // Hardware CRC calculation enable SPI_CR1_BIDIOE * 0 | // Output enable in bidirectional mode SPI_CR1_BIDIMODE * 0; // Bidirectional data mode enable SPI1->CR2 = SPI_CR2_RXDMAEN * 0 | // Rx Buffer DMA Enable SPI_CR2_TXDMAEN * 0 | // Tx Buffer DMA Enable SPI_CR2_SSOE * 0 | // SS Output Enable SPI_CR2_FRF * 0 | // Protocol format - 0: SPI Motorola mode, 1: SPI TI mode SPI_CR2_ERRIE * 0 | // Error Interrupt Enable SPI_CR2_RXNEIE * 0 | // RX buffer Not Empty Interrupt Enable SPI_CR2_TXEIE * 0; // Tx buffer Empty Interrupt Enable
Обратите внимание на SSM и SSI. Ни при каких других комбинациях SPI не работал. В отличие от STM32F103, где была другая комбинация магических битов. Объясните, зачем нужны эти биты, если ногой NSS я управляю, как GPIO. Покажите, в каком месте руководства это написано. Покажите, как работает у вас. P.S. А мануал я листаю в начале начал, а не в конце концов.
|
|
|
|
|
Jan 9 2013, 19:33
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(ViKo @ Jan 9 2013, 23:09)  Покажите, как работает у вас. Вытащил из "мусорника"... Код do { // здесь то, что нужно } while (--cnt);
while(SPI2->SR & SPI_SR_BSY); // Wait for SPI Rx Buffer Empty Ничего примечательного... вроде... кроме комента... "Wait for SPI Rx Buffer Empty"... Он остался от проверки RXNE (неудачный копипаст)... Если вернуть проверку RXNE, то происходит потеря данных... А это то, что реально работает... SPI 9bit на STM32F100...
|
|
|
|
Сообщений в этой теме
SasaVitebsk stm32f407 SPI обнаружил косяк Nov 16 2012, 10:45 VslavX Цитата(SasaVitebsk @ Nov 16 2012, 12:45) ... Nov 16 2012, 11:00 skripach Попробуйте проверять TXE, а не BSY. BSY это навер... Nov 16 2012, 11:07 SasaVitebsk Я конечно понимаю, но
ЦитатаBit 7 BSY: Busy flag
0... Nov 16 2012, 13:44  VslavX Цитата(KnightIgor @ Nov 17 2012, 00:37) П... Nov 16 2012, 23:22  HHIMERA Цитата(KnightIgor @ Nov 17 2012, 02:37) П... Nov 16 2012, 23:23   SasaVitebsk Цитата(HHIMERA @ Nov 17 2012, 03:23) Да в... Nov 17 2012, 14:55   SasaVitebsk Цитата(AHTOXA @ Nov 19 2012, 18:47) Вот т... Nov 20 2012, 20:27    AHTOXA Цитата(ViKo @ Jan 9 2013, 20:22) Насчет R... Jan 9 2013, 19:18     ViKo Цитата(AHTOXA @ Jan 9 2013, 22:18) Что зн... Jan 9 2013, 19:47      HHIMERA Цитата(ViKo @ Jan 9 2013, 23:36) а програ... Jan 9 2013, 19:48       ViKo Цитата(HHIMERA @ Jan 9 2013, 22:48) А пра... Jan 9 2013, 19:55        HHIMERA Цитата(ViKo @ Jan 9 2013, 23:55) Ржу-нима... Jan 9 2013, 20:03         ViKo Цитата(HHIMERA @ Jan 9 2013, 23:03) Продо... Jan 9 2013, 20:05        HHIMERA Цитата(ViKo @ Jan 9 2013, 23:55) Вы по пр... Jan 9 2013, 20:07      AHTOXA Цитата(ViKo @ Jan 10 2013, 01:47) по карт... Jan 9 2013, 20:30       ViKo Цитата(AHTOXA @ Jan 9 2013, 23:30) ... а ... Jan 9 2013, 20:53        HHIMERA Что вы референс не читали...
RXNE говорит только о... Jan 9 2013, 21:00         ViKo Цитата(HHIMERA @ Jan 10 2013, 00:00) Что ... Jan 9 2013, 21:02          Tahoe Цитата(ViKo @ Jan 10 2013, 01:02) Да ну? ... Jan 9 2013, 21:15          HHIMERA Цитата(ViKo @ Jan 10 2013, 00:02) Да ну? ... Jan 9 2013, 21:15        HHIMERA Цитата(ViKo @ Jan 9 2013, 23:53) И я прош... Jan 9 2013, 21:06         ViKo Цитата(HHIMERA @ Jan 10 2013, 00:06) О дё... Jan 9 2013, 21:13         ViKo Цитата(HHIMERA @ Jan 10 2013, 00:06) whil... Jan 9 2013, 21:20        AHTOXA Цитата(ViKo @ Jan 10 2013, 02:53) Не надо... Jan 9 2013, 21:18         Tahoe Цитата(AHTOXA @ Jan 10 2013, 01:18) Я лич... Jan 9 2013, 21:22         ViKo Цитата(AHTOXA @ Jan 10 2013, 00:18) Я лич... Jan 9 2013, 21:48          HHIMERA Цитата(ViKo @ Jan 10 2013, 00:38) Фантази... Jan 9 2013, 21:51          Tahoe Цитата(ViKo @ Jan 10 2013, 01:48) О том, ... Jan 9 2013, 22:00  sidy Цитата(KnightIgor @ Nov 17 2012, 02:37) 1... Dec 18 2012, 13:47   Danis Цитата(sidy @ Dec 18 2012, 17:47) Не полу... Dec 18 2012, 17:04  sidy Цитата(KnightIgor @ Nov 17 2012, 02:37) 1... Dec 19 2012, 09:25   AHTOXA Цитата(sidy @ Dec 19 2012, 15:25) И еще о... Dec 19 2012, 09:36    sidy Цитата(AHTOXA @ Dec 19 2012, 13:36) Скоре... Dec 19 2012, 15:35 HHIMERA Цитата(SasaVitebsk @ Nov 16 2012, 13:45) ... Nov 16 2012, 18:34 SasaVitebsk Цитата(HHIMERA @ Nov 16 2012, 22:34) ника... Nov 16 2012, 19:09 cyb Похоже у меня подобная проблема на STM32F103VE. По... Dec 19 2012, 13:58 AHTOXA Цитата(cyb @ Dec 19 2012, 19:58) Похоже у... Dec 19 2012, 14:22  cyb Цитата(AHTOXA @ Dec 19 2012, 16:22) У вас... Dec 19 2012, 17:02 AHTOXA Цитата(sidy @ Dec 19 2012, 21:35) Привожу... Dec 19 2012, 17:36 sidy Цитата(AHTOXA @ Dec 19 2012, 21:36) Хорош... Dec 20 2012, 04:08  AHTOXA А чему равно Rx_Data?
Как настроен SPI, какие прер... Dec 20 2012, 04:28   sidy Цитата(AHTOXA @ Dec 20 2012, 08:28) А чем... Dec 20 2012, 04:51 sidy Посмотрел я сейчас осциллограммы и кажется (если я... Dec 20 2012, 06:41 AHTOXA Цитата(sidy @ Dec 20 2012, 10:51) Кодvoid... Dec 20 2012, 07:16 cyb ЦитатаКак я понял для поднятия CS нужно ждать когд... Dec 20 2012, 09:22 sidy Спасибо за разъяснения. Задам еще вопрос здесь по ... Dec 21 2012, 12:08 AHTOXA Похоже, MISO сконфигурирован как выход. Dec 21 2012, 15:32 ViKo Подправил код для чтения идентификатора SPI Flash ... Jan 11 2013, 07:55 AHTOXA Я тут проделал несколько опытов, чтобы разобраться... Jan 11 2013, 16:01  HHIMERA "Песец... серебристый."(С)
Цитата(AH... Jan 11 2013, 16:41   AHTOXA Цитата(HHIMERA @ Jan 11 2013, 22:41) Note... Jan 11 2013, 17:04  ViKo Цитата(AHTOXA @ Jan 11 2013, 19:01) Перво... Jan 11 2013, 17:24   AHTOXA Цитата(ViKo @ Jan 11 2013, 23:24) Разверт... Jan 11 2013, 18:27    ViKo Цитата(AHTOXA @ Jan 11 2013, 21:27) Этой ... Jan 11 2013, 18:50  Tahoe Цитата(AHTOXA @ Jan 11 2013, 20:01) Перво... Jan 11 2013, 19:14   ViKo Цитата(Tahoe @ Jan 11 2013, 22:14) Сейчас... Jan 11 2013, 19:20 Tahoe На форуме ST были разборки с SPI_NSS и флагами, го... Jan 11 2013, 19:24 HHIMERA Не секрет, что все эти флаги не обязательны...
Что... Jan 11 2013, 19:53 AHTOXA Цитата(Tahoe @ Jan 12 2013, 01:14) Наскол... Jan 11 2013, 20:30 Огурцов Можно я тут со своими аналогичными глупостями влез... Jan 12 2013, 01:12  AHTOXA Цитата(Огурцов @ Jan 12 2013, 07:12) Вот ... Jan 12 2013, 05:34   Огурцов Не проверял. По-любому проверки флага готовности о... Jan 12 2013, 07:37 ViKo Цитата(AHTOXA @ Jan 11 2013, 23:30) Вот в... Jan 12 2013, 07:40  Огурцов А что с атмелом не так ? у мег такой ерунды не был... Jan 12 2013, 07:43 ViKo Цитата(AHTOXA @ Jan 11 2013, 23:30) Кстат... Jan 12 2013, 08:13  AHTOXA Цитата(ViKo @ Jan 12 2013, 13:40) Пусть б... Jan 12 2013, 09:01   ViKo Цитата(AHTOXA @ Jan 12 2013, 12:01) Как в... Jan 12 2013, 09:35 Tahoe ЦитатаI've never used slave mode without DMA b... Jan 13 2013, 15:44 AHTOXA Цитата(Tahoe @ Jan 13 2013, 21:44) Цитата... Jan 13 2013, 16:15  Tahoe Цитата(AHTOXA @ Jan 13 2013, 20:15) Судя ... Jan 13 2013, 22:43   AHTOXA Понятно, что этот код работает. Но точно так же он... Jan 14 2013, 05:28 Tahoe Речь про "сакральный смысл" флага BSY. Н... Jan 14 2013, 06:56 AHTOXA Так как раз его вариант и не раскрывает "сакр... Jan 14 2013, 07:36 ViKo Цитата(Tahoe @ Jan 14 2013, 09:56) Речь п... Jan 14 2013, 08:30  Tahoe Цитата(ViKo @ Jan 14 2013, 12:30) Смысл B... Jan 14 2013, 09:05   ViKo Цитата(Tahoe @ Jan 14 2013, 12:05) Так во... Jan 15 2013, 12:57    HHIMERA Приведённый вами код, как частный случай, ни о чём... Jan 15 2013, 13:41    AHTOXA Цитата(ViKo @ Jan 15 2013, 18:57) Коль уж... Jan 15 2013, 13:57     HHIMERA Цитата(AHTOXA @ Jan 15 2013, 16:57) С дру... Jan 15 2013, 14:17     ViKo Цитата(AHTOXA @ Jan 15 2013, 16:57) С дру... Jan 15 2013, 16:18      AHTOXA Цитата(ViKo @ Jan 15 2013, 22:18) Может в... Jan 15 2013, 16:46 ViKo Докладываю.
Посылаю в длинный последовательный рег... Mar 12 2013, 18:14 ViKo И еще.
Для переключения полярности синхроимпульсов... Mar 13 2013, 04:38 ASDFG123 Как правильно написать функцию отправки 16 бит по ... Mar 13 2016, 12:47 Alechek Подниму тут тему.
Странно, что обсуждают только ST... Jun 22 2018, 08:36
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|