Jump to content

    
Sign in to follow this  
Dr.Alex

STM32F4 продолжает подкидывать сюрпрайзы

Recommended Posts

Ваще-то речь о приёме. Или вы имеете в виду, что поскоку приём это тоже передача (:-)) то вся эта фигня с проверкой BSY или TXE и здесь может нагадить?

Но ведь используется последняя либа от производителя....

Да... Вот так надо делать :rolleyes: (на имя ANAS не обращайте внимания, это SPI)

  ANSYN_ON();                // \__
  ANAS->DR = (uint8_t)(data >> 8);    // послать биты 15 - 8
  while (!(ANAS->SR & SPI_SR_TXE));    // ждать освобождение буфера
  ANAS->DR = (uint8_t)(data);        // послать биты 7 - 0
  while (!(ANAS->SR & SPI_SR_TXE));    // ждать освобождение буфера
  // while (!(ANAS->SR & SPI_SR_RXNE));    // ждать конец передачи - нельзя!
  while (ANAS->SR & SPI_SR_BSY);    // ждать освобождение приемопередатчика
  ANSYN_OFF();                //            __/

Share this post


Link to post
Share on other sites

младший бит принимается последним.

Разные SPI по разному формируют завершающий клок и чип селект, добавив данные которые с линии могут пропасть когда им угодно, так что последний бит особенно уязвим.

 

Потому надо действительно поглядеть осцилограмму сигнала, и проверить все задержки между клоком, чипселектом и изменением данных..

Share this post


Link to post
Share on other sites
Тогда будут ВСЕ биты нестабильны.

нет, сейчас почти вся цифра очень быстрая и фронты крутые, и редко когда клоки и данные стык в стык меняются. обычно одно относительно другого на 1-10нс сдвинуто ... но иногда с прогревом например сдвигается в обратную сторону - вот тут и вылазят глюки.

На моей практике всегда было иначе - что мегабайты успешно проходили и только пара бит проскакивала левых.

 

Поэтому советую проверить так - подключить 1к в разрыв клокам или данным, но не вместе - если глюков больше стало то скорее всего полярность клоков.

А так же затронуть пальцем - если повлияли наводки то наводится ложный клок - надо делать клоки круче или ставить фильтры на ложные клоки.

Share this post


Link to post
Share on other sites

Посмотрел как в либе сделано, там конечно 130 строк кода на убогую процедуру передачи :-)))

но вроде бы действительно проверяется сначала TXE, а перед выключением ещё и BSY, то есть всё нормально.

 

Кому хочецо осцыллограмму, получайте.

 

Что мы тут видим:: вторым байтом идёт 0х85, но в DR в итоге принимается 0x84.

Напоминаю, это вообще-то приём.

post-3863-1424170990_thumb.png

Share this post


Link to post
Share on other sites
Может, неправильно задана частота периферийных шин микроконтроллера?

А чё там может быть?

SYSCLK 84

HCLK 84

APB1 42

APB2 84

 

Ещё пример. Первый байт принимается как 0х83!! Второй как 0х4Е!! :-о

post-3863-1424173538_thumb.png

Share this post


Link to post
Share on other sites

Почему у вас одна осциллограмма с 1мкс/квадрат, а другая 10мкс/квадрат? Это один и тот же SPI? И неплохо бы видеть еще и SS.

 

Ну и на первой осциллограмме у вас что-то странное с уровнями на линии данных.

Edited by Lerk

Share this post


Link to post
Share on other sites

И, это... Peak Detect у вас включен в осциллографе? А BW Limit выключен? А с подключенным пробником лучше не становится? :)

Share this post


Link to post
Share on other sites
А если порту, что такты выдает, добавить тока (частоты работы)? Или уменьшить? :rolleyes:

В смысле скорость нарастания? Специально поставлена на минимум, чтобы звона и шума не было. Для эксперимента ставил на максимум - существенно ничего не меняется.

 

Почему у вас одна осциллограмма с 1мкс/квадрат, а другая 10мкс/квадрат? Это один и тот же SPI? И неплохо бы видеть еще и SS.

Ну и на первой осциллограмме у вас что-то странное с уровнями на линии данных.

Потому что на разных скоростях пробовал. С НСС всё нормально.

Что не так с уровнями? Просто земля, куда щуп прицеплен, немного плавает.

 

И, это... Peak Detect у вас включен в осциллографе? А BW Limit выключен? А с подключенным пробником лучше не становится? :)

Никаких фокусов и полтергейста нет. Вот гладенькие фронты, если чё.

post-3863-1424177682_thumb.png

Share this post


Link to post
Share on other sites
Что не так с уровнями? Просто земля, куда щуп прицеплен, немного плавает.

у вас линия данных до начала передачи имеет землю - 0, а во время и после передачи - 0.2В. Не то чтобы сильно большая разница, и может даже не касается темы обсуждения, но в цифровых схемах такого просто так не бывает, и видимо, дизайном не предусмотрено, а значит должна быть найдена и устранена причина плавающего нуля на линии данных. имхо)

 

2ViKo, f4 же работает и на 1.8В

Share this post


Link to post
Share on other sites
Куда же больше?? В конце 21-ого века живём, как-никак. Питание 1.8.

Понятно. Там для разного питания разную латентность Flash нужно задать. Надо думать, у вас все правильно задано?

Share this post


Link to post
Share on other sites
Понятно. Там для разного питания разную латентность Flash нужно задать. Надо думать, у вас все правильно задано?

 

Стоит 5-ая. Это ещё с запасом. Только я вот думаю, она от частоты зависит (а частота ещё от напряжения ядра), а не от напряжения IO.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this