|
STM32F4: Помехи по I2C. |
|
|
|
Apr 3 2017, 10:56
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Есть небольшой проектик на STM32F429 (на отладке discovery). На этой EVB на I2C3 сидит пара чипов + я подключил к ней внешнюю плату, на которой на этой шине ещё 2 устройства. Кроме того - в проекте есть модуль на ESP8266. Пока ESP8266 находится в RESET-е - всё прекрасно работает - обмен со всеми используемыми (3-мя) устройствами на I2C идёт без проблем. Но как только снимаешь RESET с ESP8266 и начинаешь ей давать какие-то AT-команды, начинаются чудеса на I2C: возникают различные ошибки обмена на шине (и "bus error" и " Arbitration lost" и просто NACK в произвольный момент транзакции). Всё работает конечно параллельно-многозадачно и нельзя остановить ESP8266, поюзать I2C и продолжить работу с ESP8266. Такое ощущение что мощные помехи прут из ESP8266 и влияют в основном на I2C. Но ранее этот проект работал на EVB с LPC1788 и там проблем с I2C не было вообще! Там ESP8266 работал часами параллельно с обменом по I2C, разве что устройств на I2C было на 1 меньше.
Перепробовал уже всё что можно для борьбы с помехами - в регистрах I2C периферии включил все фильтры на максимум, перепробовал все опции для отдельных пинов I2C, менял скорости - никакого толку. Дальше на плате навесил разной керамики и 0.1мкФ и 10мкФ прямо возле ног сбоящей I2C-периферии и возле ESP8266. Потом вообще отделил ESP8266 по питанию и по GND дросселями 22мкГн - кол-во сбоев снизилось в разы, но всё равно неприемлемо много. Пробовал вообще отдельный источник питания (DC-DC от розетки 220V) для ESP8266, соединив его GND с остальной платой через дроссель - стало даже хуже. Сейчас запитано так: EVB питается штатно от USB, внешняя плата запитана +5V от отдельного DC-DC, на ней стоит ещё LDO, от которого запитано всё по 3.3V и от него же через дросселя по +3.3V и GND запитана ESP8266. Пока RESET на ESP8266 - всё ок. Как только снимаем RESET и начинаем подавать AT-команды, то максимум на 10-й команде AT+GMR (печать инфы о прошивке и т.п.) получаю сбой по I2C. Если давать команды перезагрузки ESP8266 или команду скан эфира - ещё быстрее сбой происходит.
Попробую ещё навешать последовательных резисторов по всем сигнальным линиям ESP8266, но что-то сомнительно. И больше уже не знаю что ещё сделать. Да и странно это как-то - на LPC1788 всё работало вообще как есть без всяких фильтров и даже просто - всё на соплях болталось на проводах и работало! Неужели I2C на STM32F4 такой нежный???
|
|
|
|
|
 |
Ответов
|
Apr 11 2017, 22:07
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 29-03-10
Пользователь №: 56 269

|
Осциллограммы посмотреть можно, чтобы убедиться в правильности формирования протокола, хотя несинхронную помеху сложно будет увидеть. Раньше тоже думал, стоит только поставить конденсатор или дроссель в нужное место и все сразу заработает и проблемы исчезнут, не исчезнут, почти всегда приходится изменять топологию или конструкцию. Если вы уверены в протоколе и откуда то все равно идет помеха, попробуйте как-нибудь заэкранировать шину i2c от платы discovery до внешнего устройства, экран землите с одной стороны, чтобы по нему ток не ходил. Если помеха проходит через резисторы подтяжки R29 R30, а это вполне вероятно, тогда можно снять их с платы discovery и для пробы поставить в конец шины i2c на внешнее устройство, тогда потеряем в надежности, если оно отвалится, вся шина не будет работать. Если это поможет, то можно на плате discovery аккуратно отрезать резисторы подтяжки от питания, восстановить шину питания в этом месте, вернуть резисторы назад и подать напряжение на них проводом непосредственно с контактов питания контроллера. Обмен с подтверждением с кодом циклического контроля, КЦК или CRC, в моем случае пишем блок 264 байта в память dataflash, 256 байт данных и 8 байт CRC, затем читаем его и проверяем CRC, при ошибке пишем повторно.
Сообщение отредактировал AnatolyT - Apr 11 2017, 22:41
|
|
|
|
|
Apr 12 2017, 09:37
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Насчёт осцилла: так как проблема потеряла остроту (пока временное решение с активным SCL устраивает) и есть более важные проблемы (с ПО) - отложу это пока в сторону, тем более что доставить осцилл к устройству или устройству к осциллу пока затруднительно по географическим причинам (был бы я дома - не вопрос - через неск. минут снял-бы их). Но по мере возможности осциллограммы сниму и выложу сюда. В протоколе уверен почти на 100%, ибо: 1) с остановленным обменом с ESP8266 всё работает часами в разных режимах обмена со слэйвами, при старте же обмена с ESP8266 падает через неск. секунд после старта; 2) обмен с ESP8266 в данном случае простейший (тестовый) и опять-же выполняется через драйвер UART, через данный драйвер ещё два других UART-канала работают с гораздо более сложным траффиком (т.е. - драйвер можно считать отлаженным); 3) все сбои по I2C носят ярко выраженный характер помех на линии (все исключительные ситуации в ПО, типа фаултов, выходов за границы регионов памяти и т.п.) у меня максимально возможно отслеживаются; 4) при подключении ESP8266 не напрямую в разъём на монтажную плату возле слэйвов короткими проводами, а в этот же разъём через удлинитель порядка 15 см - даёт кратное уменьшение кол-ва сбоев (но всё равно остаются, да и не устраивает такое конструктивно); 5) ... многие другие причины, в том числе и субъективные Насчёт резисторов подтяжки - совет хороший, я тоже думал на этот счёт. Оставил это пока на крайний случай. Цитата(AnatolyT @ Apr 12 2017, 00:07)  Обмен с подтверждением с кодом циклического контроля, КЦК или CRC, в моем случае пишем блок 264 байта в память dataflash, 256 байт данных и 8 байт CRC, затем читаем его и проверяем CRC, при ошибке пишем повторно. У Вас вероятно SPI. С I2C это никак не поможет, ибо типы сбоев, которые у меня происходят - я описывал выше. Они приводят к обрыву транзакции, а не к разрушению данных (хотя может и последнее тоже есть). И самое интересное - из всех слэйвов висящих на шине, как раз I2C-FRAM память и не сбоит вообще! Сбоят как раз другие слэйвы, которые не память и для которых такой контроль не подходит. PS: Кстати - в Вашем случае, раз уж хотите контролировать правильность записи в DATAFLASH, имхо оптимальнее контролировать по-другому: загружать во внутренний ОЗУ-буфер в чипе, потом оттуда считывать полностью, сравнивать, а потом уже давать команду записи буфер->flash. Ну или считывать и сверять буфер после записи во flash.
|
|
|
|
|
Apr 16 2017, 13:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(jcxz @ Apr 12 2017, 12:37)  . . . 4) при подключении ESP8266 не напрямую в разъём на монтажную плату возле слэйвов короткими проводами, а в этот же разъём через удлинитель порядка 15 см - даёт кратное уменьшение кол-ва сбоев (но всё равно остаются, да и не устраивает такое конструктивно); . . . . Соедините плату с модулем(ESP8266) кортоким кабелем, а сам модуль - в жестяной(Fe) экран. Если сбои пропадут полностью - наводка по радиочастоте. И может даже не на I2C, а напр. на частотозадающие элементы процессора.
|
|
|
|
Сообщений в этой теме
jcxz STM32F4: Помехи по I2C. Apr 3 2017, 10:56 Jury093 Цитата(jcxz @ Apr 3 2017, 13:56) Неужели ... Apr 3 2017, 11:09 jcxz Цитата(Jury093 @ Apr 3 2017, 13:09) во вс... Apr 3 2017, 13:36  KnightIgor Цитата(jcxz @ Apr 3 2017, 14:36) На LPC17... Apr 3 2017, 17:56   jcxz Цитата(KnightIgor @ Apr 3 2017, 19:56) Пр... Apr 4 2017, 09:04  Jury093 Цитата(jcxz @ Apr 3 2017, 16:36) Да неужт... Apr 4 2017, 09:37   jcxz Цитата(Jury093 @ Apr 4 2017, 11:37) мнэ..... Apr 4 2017, 11:30    Jury093 Цитата(jcxz @ Apr 4 2017, 14:30) Сейчас п... Apr 4 2017, 14:07     jcxz Цитата(Jury093 @ Apr 4 2017, 16:07) - на ... Apr 9 2017, 15:41      Obam Цитата(jcxz @ Apr 9 2017, 19:41) Сейчас в... Apr 9 2017, 15:57       jcxz Цитата(Obam @ Apr 9 2017, 17:57) Как чест... Apr 9 2017, 16:56      Axel Цитата(jcxz @ Apr 9 2017, 18:41) Сейчас в... Apr 10 2017, 02:54 ViKo А осциллограммы I2C шины будут продемонстрированы?... Apr 3 2017, 11:14 Obam Сама discovery с поганой для рядом находящегося пе... Apr 3 2017, 11:25 KnightIgor Цитата(jcxz @ Apr 3 2017, 11:56) Да и стр... Apr 3 2017, 12:38 Шаманъ jcxz, тактируете это дело я так понимаю от HSE? Ес... Apr 4 2017, 05:57 Sanya_kv Сталкивался с подобной проблемой, импульсными наво... Apr 4 2017, 06:07 ANT Цитата(Sanya_kv @ Apr 4 2017, 09:07) Стал... Apr 4 2017, 07:29 Obam Цитата(Sanya_kv @ Apr 4 2017, 10:07) …про... Apr 4 2017, 08:03 AnatolyT Если проблема исчезла когда переключили резисторы ... Apr 9 2017, 17:23 jcxz Цитата(AnatolyT @ Apr 9 2017, 19:23) Если... Apr 10 2017, 07:02 vladec ЦитатаЭто конечно неправильно и противоречит специ... Apr 10 2017, 06:46 AnatolyT В свое время делал следующее: в существующий измер... Apr 10 2017, 08:24 vladec "Открытый сток/коллектор" на шине SCL ну... Apr 11 2017, 07:26 Сергей Борщ QUOTE (vladec @ Apr 11 2017, 10:26) нужен... Apr 11 2017, 09:03  KnightIgor Цитата(Сергей Борщ @ Apr 11 2017, 10:03) ... Apr 11 2017, 09:11 jcxz Цитата(vladec @ Apr 11 2017, 09:26) Если ... Apr 11 2017, 11:08  AlexRayne Цитата(jcxz @ Apr 11 2017, 13:56) Повторю... Apr 11 2017, 11:08   jcxz Цитата(AlexRayne @ Apr 11 2017, 13:08) 1)... Apr 11 2017, 11:18   Axel Цитата(AlexRayne @ Apr 11 2017, 14:08) 1)... Apr 11 2017, 11:26  ViKo Цитата(jcxz @ Apr 11 2017, 14:08) Повторю... Apr 11 2017, 11:21   jcxz Цитата(ViKo @ Apr 11 2017, 13:21) Busy. М... Apr 11 2017, 11:22    ViKo Цитата(jcxz @ Apr 11 2017, 14:22) См. соо... Apr 11 2017, 11:32 gerber Я бы предположил, что ESP8266 иногда ловит ложное ... Apr 11 2017, 09:34 Сергей Борщ QUOTE (gerber @ Apr 11 2017, 12:34) Я бы ... Apr 11 2017, 10:06  Jury093 Цитата(jcxz @ Apr 12 2017, 12:37) Насчёт ... Apr 12 2017, 12:05   Axel Цитата(k155la3 @ Apr 16 2017, 16:41) ... ... Apr 16 2017, 16:55  blackfin Цитата(jcxz @ Apr 12 2017, 12:37) Насчёт ... Apr 19 2017, 18:53   jcxz Цитата(blackfin @ Apr 19 2017, 20:53) под... Apr 19 2017, 19:33    Axel Цитата(jcxz @ Apr 19 2017, 22:33) Да, сто... Apr 20 2017, 05:09     ViKo Цитата(Axel @ Apr 20 2017, 08:09) Если pu... Apr 20 2017, 07:44      Axel Цитата(ViKo @ Apr 20 2017, 10:44) ...Особ... Apr 21 2017, 01:56       jcxz Цитата(Axel @ Apr 21 2017, 03:56) (исходн... Apr 21 2017, 07:34 Arlleex Всем привет.
Проблема живет не только у STM32, кст... Apr 16 2017, 10:06 Nosaer Я бы вам на будущее посоветовал обзавестись вот та... Apr 17 2017, 03:28 Axel Цитата(Nosaer @ Apr 17 2017, 06:28) ...бо... Apr 17 2017, 03:50 jcxz Цитата(Nosaer @ Apr 17 2017, 05:28) Я бы ... Apr 19 2017, 18:04 ViKo Отражения, они всегда есть при несогласованных вол... Apr 21 2017, 05:10 Axel Цитата(ViKo @ Apr 21 2017, 08:10) Отражен... Apr 21 2017, 06:31 ViKo Комплексный или не комплексный импеданс - для отра... Apr 21 2017, 06:44 Axel Цитата(ViKo @ Apr 21 2017, 09:44) Комплек... Apr 21 2017, 07:03 Obam Цитата(ViKo @ Apr 21 2017, 10:44) Комплек... Apr 21 2017, 07:59  ViKo Цитата(Obam @ Apr 21 2017, 10:59) К слову... Apr 21 2017, 09:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|