реклама на сайте
подробности

 
 
> STM32F4: Помехи по I2C.
jcxz
сообщение Apr 3 2017, 10:56
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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 такой нежный???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AnatolyT
сообщение Apr 11 2017, 22:07
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 12 2017, 09:37
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Насчёт осцилла: так как проблема потеряла остроту (пока временное решение с активным SCL устраивает) и есть более важные проблемы (с ПО) - отложу это пока в сторону, тем более что доставить осцилл к устройству или устройству к осциллу пока затруднительно по географическим причинам (был бы я дома - не вопрос - через неск. минут снял-бы их).
Но по мере возможности осциллограммы сниму и выложу сюда.
В протоколе уверен почти на 100%, ибо:
1) с остановленным обменом с ESP8266 всё работает часами в разных режимах обмена со слэйвами, при старте же обмена с ESP8266 падает через неск. секунд после старта;
2) обмен с ESP8266 в данном случае простейший (тестовый) и опять-же выполняется через драйвер UART, через данный драйвер ещё два других UART-канала работают с гораздо более сложным траффиком (т.е. - драйвер можно считать отлаженным);
3) все сбои по I2C носят ярко выраженный характер помех на линии (все исключительные ситуации в ПО, типа фаултов, выходов за границы регионов памяти и т.п.) у меня максимально возможно отслеживаются;
4) при подключении ESP8266 не напрямую в разъём на монтажную плату возле слэйвов короткими проводами, а в этот же разъём через удлинитель порядка 15 см - даёт кратное уменьшение кол-ва сбоев (но всё равно остаются, да и не устраивает такое конструктивно);
5) ... многие другие причины, в том числе и субъективные laughing.gif

Насчёт резисторов подтяжки - совет хороший, я тоже думал на этот счёт. Оставил это пока на крайний случай.

Цитата(AnatolyT @ Apr 12 2017, 00:07) *
Обмен с подтверждением с кодом циклического контроля, КЦК или CRC, в моем случае пишем блок 264 байта в память dataflash, 256 байт данных и 8 байт CRC, затем читаем его и проверяем CRC, при ошибке пишем повторно.

У Вас вероятно SPI. С I2C это никак не поможет, ибо типы сбоев, которые у меня происходят - я описывал выше. Они приводят к обрыву транзакции, а не к разрушению данных (хотя может и последнее тоже есть).
И самое интересное - из всех слэйвов висящих на шине, как раз I2C-FRAM память и не сбоит вообще! laughing.gif
Сбоят как раз другие слэйвы, которые не память и для которых такой контроль не подходит.

PS: Кстати - в Вашем случае, раз уж хотите контролировать правильность записи в DATAFLASH, имхо оптимальнее контролировать по-другому: загружать во внутренний ОЗУ-буфер в чипе, потом оттуда считывать полностью, сравнивать, а потом уже давать команду записи буфер->flash. Ну или считывать и сверять буфер после записи во flash.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Apr 19 2017, 18:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(jcxz @ Apr 12 2017, 12:37) *
Насчёт резисторов подтяжки - совет хороший, я тоже думал на этот счёт. Оставил это пока на крайний случай.

На всякий случай, Phillips подключает свои м/схемы к шине I2C через низкоомные резисторы от 47 до 100 Ом:
[attachment=106748:EEPROM.jpg]

PS. Всю тему не читал, может, кто уже советовал..
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 19 2017, 19:33
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(blackfin @ Apr 19 2017, 20:53) *
подключает свои м/схемы к шине I2C через низкоомные резисторы от 47 до 100 Ом:
PS. Всю тему не читал, может, кто уже советовал..

Да, стоит попробовать. Советовали уже.
Go to the top of the page
 
+Quote Post
Axel
сообщение Apr 20 2017, 05:09
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(jcxz @ Apr 19 2017, 22:33) *
Да, стоит попробовать...

Если pull-up резисторы >= 1к - как мертвому припарки (ИМХО). Более перспективно уменьшить пулл-апы Ом до 300 (если все абоненты держат 10mA и тока не жалко).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - k155la3   Цитата(jcxz @ Apr 12 2017, 12:37) . . . ...   Apr 16 2017, 13:41
||- - Axel   Цитата(k155la3 @ Apr 16 2017, 16:41) ... ...   Apr 16 2017, 16:55
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 14:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016