Перейти к содержанию
    

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

Ваще-то речь о приёме. Или вы имеете в виду, что поскоку приём это тоже передача (:-)) то вся эта фигня с проверкой 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();                //            __/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда будут ВСЕ биты нестабильны.

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

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

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

post-3863-1424170990_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может, неправильно задана частота периферийных шин микроконтроллера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может, неправильно задана частота периферийных шин микроконтроллера?

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

SYSCLK 84

HCLK 84

APB1 42

APB2 84

 

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

post-3863-1424173538_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Изменено пользователем Lerk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

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

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

 

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

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

post-3863-1424177682_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Меньше 2V? А что так ма

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Меньше 2V? А что так ма

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...