alex_avr (alex_avr2) wrote,
alex_avr
alex_avr2

Categories:

STM32F030 SPI CRC ERRATA

А между тем, только сейчас заметил, что год назад вышла новая версия ERRATA для STM32F030. По сравнению с предыдущей версией выросла в объеме в два раза.

Чуть больше двух лет назад я не один день промучился пытаясь использовать возможность SPI в STM32F030 автоматически вычислять и добавлять CRC при отправке данных. Функция была мне крайне нужна. Объем, частота и скорость пересылки данных были очень высокими, так что даже используя аппаратный модуль вычисления CRC ресурсов МК бы не хватило. Проблема была в том, что функция автоматического добавления CRC к посылкам через SPI во-первых была крайне плохо документирована, во-вторых работала откровенно глючно. Я уж не помню всех подробностей и нюансов, но глюки были откровенные. При этом в интернете было несколько сообщений от людей столкнувшихся с такой же или близкой проблемой, но без внятных решений. Да и видимо этой функцией мало кто пользуется, поэтому информации было совсем мало. Разумеется я проверил ERRATA на серию, но на тот момент там не было ничего про это.

В конце концов, я решил проблему несколько корявым, на первый взгляд способом - я выяснил, что при первой отправке данных, при соблюдении ряда условий CRC всегда вычисляется и передается корректно, а вот при следующих посылках начинаются проблемы. Поэтому я поступил брутально - просто стал сбрасывать модуль SPI перед каждой передачей данных и настраивать заново, благо в регистре RCC есть биты для сброса различных модулей.

RCC->APB2RSTR |= RCC_APB2RSTR_SPI1RST;
RCC->APB2RSTR &= ~RCC_APB2RSTR_SPI1RST;

Думаю этот код можно упростить до двух атомарных операций, но что есть написанное 2+ года назад - то есть :)
Забавно, но этот подход сработал и полностью себя оправдал. Пока вы читали этот пост - где-то на этой планете модуль SPI был сброшен несколько миллионов раз :)

А сейчас я открыл свеженькую ERRAT-у и увидел. что там появились пункты про SPI+CRC аж четыре. Причем навскидку там нет моей проблемы, хотя сейчас разбираться уже лень. Дааа, знатно они с этой частью накосячили, наверное какой-то студент писал код в режиме аврала :)))



P.S. Вот было бы весело товарищам использующим SPL/HAL в случае столкновения с подобными проблемами. Вот все равно бы пришлось лезть и в документацию и в регистры и разбираться и переписывать всю работу со SPI на прямую работу с регистрами без лишних прослоек.
Tags: Грабли, Микроконтроллеры, Программирование, Электроника
Subscribe

  • Про автосервисы

    Когда только обзавелся машиной, ещё довольно плохо представлял, как она обслуживается. Сейчас-то мне понятно, что ничего сложного нет, кроме может…

  • 14 лет под землёй

    Традиционная запись 2 ноября: ровно 14 лет как я осознанно изучаю подземку 🙂 Ну и традиционная фотография. Это самая страшная фотография под землёй,…

  • Снежные Ловозёрские тундры

    В Москве снега до сих пор нет, между тем я ещё больше месяца назад успел по нему накататься, заехав наверх Ловозёрского горного массива, что на…

promo alex_avr2 july 2, 2018 13:00 41
Buy for 200 tokens
Думаю многие слышали рассказы про огромные бункеры под Москвой, подземные города, секретное метро на случай ядерной войны. Многое в этих рассказах очевидно преувеличено, что-то придумано, но безусловно, основаны они не на пустом месте. Совсем недавно небольшой кусочек этих подземных тайн был…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 26 comments

  • Про автосервисы

    Когда только обзавелся машиной, ещё довольно плохо представлял, как она обслуживается. Сейчас-то мне понятно, что ничего сложного нет, кроме может…

  • 14 лет под землёй

    Традиционная запись 2 ноября: ровно 14 лет как я осознанно изучаю подземку 🙂 Ну и традиционная фотография. Это самая страшная фотография под землёй,…

  • Снежные Ловозёрские тундры

    В Москве снега до сих пор нет, между тем я ещё больше месяца назад успел по нему накататься, заехав наверх Ловозёрского горного массива, что на…