Zuse 0 22 сентября, 2021 Опубликовано 22 сентября, 2021 (изменено) · Жалоба Всем привет! Есть в наличии отладочная плата NUCLEO-WL55JC2 https://www.st.com/content/ccc/resource/technical/layouts_and_diagrams/schematic_pack/group1/5d/4c/98/a5/b4/ff/48/5b/MB1389-WL55JC-lowband-D04_Schematic/files/MB1389-WL55JC-lowband-D04_Schematic.pdf/jcr:content/translations/en.MB1389-WL55JC-lowband-D04_Schematic.pdf на двухъядерном STM32WL55JCI7 с встроенным трансивером. Взаимодействие CPU с трансивером внутри МК происходит по отдельному SPI (SUBGHZSPI), линии которого наружу не выходят. Отлаживая программу заметил, что при передаче по SUBGHZSPI одного байта в приемном буфере почему-то появляется не один, а два байта. Поскольку внутрь МК осциллографом не залезть и что происходит на линиях SUBGHZSPI не посмотреть, я решил посмотреть работу SPI1. Сконфигурировал SP1 как мастер, задал длину посылки 8 бит, записал в DR байт и увидел на осциллографе не один, а два байта. Первый байт - тот, что записал в DR, а второй - 0х00. Стал играться длинной посылки и обнаружил, что при длинах посылки >8бит передача происходит нормально, а при длинах <=8бит помимо слова данных дополнительно передается нулевое слово. Полагая, что в инициализации SPI есть ошибка, я решил сконфигурировать SPI1 с помощью CubeMX и посмотреть, что получится. Сконфигурировал одноядерный проект. В текст main после вызова функций инициализации перед while(1) добавил три строки: SPI1->DR = (uint8_t) 0x97; SPI1->DR = (uint8_t) 0xAA; SPI1->CR1 |= (1<<6); В результате на осциллограмме увидел тоже, что и прежде: Коллеги, ай нид хелп... Не понимаю, что не так. Изменено 22 сентября, 2021 пользователем Zuse Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zuse 0 22 сентября, 2021 Опубликовано 22 сентября, 2021 · Жалоба PS Если вместо константы 0x97 записать например 0xAA97 то во втором байте вместо нулей будет 0xAA. Т.е. видимо нужно как-то дать понять компилятору, что 0x97 это байт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 22 сентября, 2021 Опубликовано 22 сентября, 2021 · Жалоба Где-то в ширине доступа к регистрам (byte-/halfword-/word-access) собака порылась. Думаю, там такие же "особенности", как, например, в других STM-ках с FIFO на SPI-модуле. Читать тут вкупе с RM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zuse 0 22 сентября, 2021 Опубликовано 22 сентября, 2021 (изменено) · Жалоба 44 minutes ago, Arlleex said: Где-то в ширине доступа к регистрам (byte-/halfword-/word-access) собака порылась. Думаю, там такие же "особенности", как, например, в других STM-ках с FIFO на SPI-модуле. Читать тут вкупе с RM. Помогла конструкция "*(uint_8t *)&SPI1->DR = ..." из указанной темы Спасибо! Изменено 22 сентября, 2021 пользователем Zuse Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardWareMan 3 22 сентября, 2021 Опубликовано 22 сентября, 2021 · Жалоба 4 hours ago, Arlleex said: Где-то в ширине доступа к регистрам (byte-/halfword-/word-access) собака порылась. Думаю, там такие же "особенности", как, например, в других STM-ках с FIFO на SPI-модуле. Они это называют пакованием. И, кстати, на младших моделях STM оно включено по умолчанию. А нужно это для оптимизации доступа и обеспечении непрерывности передачи. Но бывает что вызывает подобные грабли, да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 22 сентября, 2021 Опубликовано 22 сентября, 2021 · Жалоба 1 час назад, HardWareMan сказал: Они это называют пакованием... Кто они? И где называют? Пока что только от Вас слышу. Цитата И, кстати, на младших моделях STM оно включено по умолчанию... Это где это оно еще включается? Хоспаде, STM-овцы вырвали из APB бит ширины доступа и завязали его на кол-во записываемых байт. Проблема надумана, ситуация описана в RM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба 14 часов назад, Arlleex сказал: Кто они? И где называют? Инженеры-писатели ST. В документации: 20 часов назад, Zuse сказал: Взаимодействие CPU с трансивером внутри МК происходит по отдельному SPI (SUBGHZSPI), линии которого наружу не выходят. У WLE5 есть возможность вывести сигналы этого SPI наружу для отладки: У вашего такой возможности точно нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zuse 0 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба 23 minutes ago, Сергей Борщ said: Инженеры-писатели ST. В документации: У WLE5 есть возможность вывести сигналы этого SPI наружу для отладки: У вашего такой возможности точно нет? невнимательно читал DS... оказывается есть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardWareMan 3 23 сентября, 2021 Опубликовано 23 сентября, 2021 (изменено) · Жалоба 16 hours ago, Arlleex said: Кто они? И где называют? Пока что только от Вас слышу. Именно они, которые производители. Вот вы, вроде, ссылаетесь на RM, а сами похоже его не читали. Ну или читали по диагонали. 16 hours ago, Arlleex said: Это где это оно еще включается? Хоспаде, STM-овцы вырвали из APB бит ширины доступа и завязали его на кол-во записываемых байт. Проблема надумана, ситуация описана в RM. Это имеет значение не как запись сама по себе, а как взаимосвязь записи и встроенного FIFO, который нельзя выключить полностью. И когда ты работаешь с размером слова не равным 16 бит появляются все эти странные телодвижения. Зато непрерывный поток на физической линии. Изменено 23 сентября, 2021 пользователем HardWareMan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба Понял. Вы про вторую часть моего сообщения говорили, а не про первую. Я думал что именно ширина доступа где-то STM-овцами обозвана "пакованием" и до кучи как-то включается/выключается, что и вызвало недоумение. А все эти картинки из RM я видел - дальше можно не продолжать С SPI на STM32 я знаком вдоль и поперек, а слово "особенности" я не зря выделил кавычками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardWareMan 3 23 сентября, 2021 Опубликовано 23 сентября, 2021 · Жалоба Ну тут же у ТС была проблема, что он использовал прямое присваивание в регистр DR, который объявлен в заголовках на чипс как __IO uint16_t. Поэтому, я думал мы в топике, и речи за размер слова не идёт, только в рамках 8/16 бит. И кстати: On 9/22/2021 at 8:29 PM, Zuse said: Помогла конструкция "*(uint_8t *)&SPI1->DR = ..." из указанной темы Будет работать. Но разве не правильнее будет *(__IO uint8_t *)&SPI1->DR = ...? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться