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

 
 
> 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
Ответов
Jury093
сообщение Apr 3 2017, 11:09
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(jcxz @ Apr 3 2017, 13:56) *
Неужели I2C на STM32F4 такой нежный???

во всей эпопее я не увидел подключение осциллографа (если он есть) для анализа происходящего
1. что там с пуллапами? номиналы крутили?
2. сгородить примитивную развязку по i2c пробовали а-ля Филипс?
3. в каком режиме ESP8266? судя по инету оно умеет и мастер и слейв, и тогда коллизии на шине вполне вписываются в картину происходящего..
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 3 2017, 13:36
Сообщение #3


Гуру
******

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



Цитата(Jury093 @ Apr 3 2017, 13:09) *
во всей эпопее я не увидел подключение осциллографа (если он есть) для анализа происходящего

Пока нет под рукой. Не думал что для подключения простейшего I2C понадобится осцилл.... sad.gif
Если совсем припрёт - придётся притащить.

Цитата(Jury093 @ Apr 3 2017, 13:09) *
1. что там с пуллапами? номиналы крутили?

На самой EVB есть резисторы 4.7К, плюс - на внешней плате ещё по 4.7К.

Цитата(Jury093 @ Apr 3 2017, 13:09) *
2. сгородить примитивную развязку по i2c пробовали а-ля Филипс?

Да неужто для работы обычного I2C с проводами длиной до 10см необходима ещё и развязка???
Это что-то слишком уже. Питание одно.

Цитата(Jury093 @ Apr 3 2017, 13:09) *
3. в каком режиме ESP8266? судя по инету оно умеет и мастер и слейв, и тогда коллизии на шине вполне вписываются в картину происходящего..

Он подключен по UART - коллизий никаких быть не может. На AT-команды отвечает. Источник питания достаточно мощный даже для него:
импульсный DC-DC на LM2596S после которого ещё линейный TLE4275V33 с вых. током 400мА.
ESP8266 в режиме IDLE (нет ничего по эфиру). При этом уже на команду AT+GMR (просто запрос инфы о прошивке) без выхода в эфир - проблемы.

Цитата(Obam @ Apr 3 2017, 13:25) *
Сама discovery с поганой для рядом находящегося передатчика разводкой (землёй) - возможно?

К этому больше всего и склоняюсь. Ибо даже на её шине питания вместо 3.3V всего лишь 2.95V (оч. слабая схема питания с ещё и диодом с 5V на входе).

Цитата(Obam @ Apr 3 2017, 13:25) *
SDA, SCL пустить через ферритовые бусины.

Как вариант.

Цитата(KnightIgor @ Apr 3 2017, 14:38) *
"У меня есть гипотеза" - как говаривал маленький и любознательный динозаврик из "Поезда динозавров". На гипотезу навело меня упоминание об LPC1788, с которым было все хорошо.
Вы будете смеяться, но дело скорее всего не в помехах, а леворезьбовом I2C в STM32F1+. По этой теме было писано-переписано немеряно здесь, мной - по большей части. Краткая суть: I2C в 1xx и 4хх (I2C в 0xx переделан и работает как конфетка) страсть как не любит многозадачность, а хочет исполняться на самом высоком приоритете прерываний, а лучше - вообще при запрещенных. Причина: дурацкое определение бита (N)ACK уже в процессе приема байта и пара других мелочей как-то куча особых случаев при приеме и непредусмотренные битовые комбинации статуса автомата I2C, что вводит в ступор библиотеки. Вангуя, предположу, что обмен AT командами идет с высоким приоритетом, что вторгается во временнЫе характеристики кода для работы с I2C, со всеми вытекающими...

Попробуйте дать I2C высокий приоритет, выше, чем UART для ESP8266. Лучшие советы дать не могу, не зная Вашего кода и OS.

1.Приоритет для I2C и так - максимальный (как и для LPC1788 был), ну правда только делит один уровень вместе с ISR канала захвата таймера IR-приёмника. Можно конечно над IR-приёмником его вынести, но между IR-приёмником и I2C точно никаких проблем нет - во время отладки IR-приёма никаких коллизий с I2C не наблюдалось.
2.Библиотек никаких нету. Работа вся через регистры + частично используется DMA для I2C. Частота CPU 120МГц, можно и больше поставить. На LPC за глаза хватало 78МГц на всё. При том там уже всё работало - все процессы и драйверы.
3."Обмена AT-командами" как такового ещё нет - я постепенно переношу проект с платы LPC1788 на STM32F429. Перенёс почти всё уже - это кучка драйверов для устройств на паре шин SPI, 2-х UART-ах и одной I2C. По SPI идёт периодическое обновление LCD, по I2C периодически опрашивается 3 устройства на шине. Опрос I2C ведётся диспетчером в пределах одной задачи: в задаче - запуск транзакции; в ISR - продолжение транзакции, запуск DMA; завершение транзакции - в задаче. Весь обмен разбит на транзакции, которыми управляет диспетчер в одной задаче ОС.
Запретов прерываний длинных нет - есть контроль - точно все запреты менее 10мкс.
Работа с ESP8266 пока ещё не перенесена. Пока его только подключил и попробовал подавать AT-команды вручную через отладочную консоль - и тут вылезла данная проблема.
Все признаки указывают именно на аппаратную проблему.
На LPC1788 все было спаяно на соплях - ESP8266 вообще на проводах висел. Здесь же решил сделать получше - спаял на отдельной платке, ещё и блокировочных кондёров понавесил, провода укоротил - и на тебе - ещё хуже получилось sad.gif(
Go to the top of the page
 
+Quote Post
Jury093
сообщение Apr 4 2017, 09:37
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(jcxz @ Apr 3 2017, 16:36) *
Да неужто для работы обычного I2C с проводами длиной до 10см необходима ещё и развязка???
Это что-то слишком уже. Питание одно.

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

Цитата
Он подключен по UART - коллизий никаких быть не может. На AT-команды отвечает. Источник питания достаточно мощный даже для него:
импульсный DC-DC на LM2596S после которого ещё линейный TLE4275V33 с вых. током 400мА.
ESP8266 в режиме IDLE (нет ничего по эфиру). При этом уже на команду AT+GMR (просто запрос инфы о прошивке) без выхода в эфир - проблемы.

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

Цитата
К этому больше всего и склоняюсь. Ибо даже на её шине питания вместо 3.3V всего лишь 2.95V (оч. слабая схема питания с ещё и диодом с 5V на входе).

временно напаять заведомо толстый провод..

Цитата
3."Обмена AT-командами" как такового ещё нет - я постепенно переношу проект с платы LPC1788 на STM32F429.на тебе - ещё хуже получилось sad.gif(

нельзя ли временно на соплях отцепить stm32 и подключить LPC на i2c дефективной платы?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 4 2017, 11:30
Сообщение #5


Гуру
******

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



Цитата(Jury093 @ Apr 4 2017, 11:37) *
мнэ.. вы же понимаете, что без схемы и монтажки давать более предметные советы могут только телепаты со стажем..

Схемы/монтажки нет. Как я писал выше - это макет.
Т.е.: EVB вот эта http://www.st.com/en/evaluation-tools/32f429idiscovery.html
к ней проводами длиной до 10см подключена монтажная кросс-плата, к которой припаяны пара платок с I2C-слэйвами (ещё один слэйв на этой-же шине - на самой EVB).
Вот сбоит чаще всего один из слэйвов на монтажке (это FM-тюнер). Ещё иногда сбоит слэйв который на EVB (это touchscreen-контроллер). Второй I2C-слэйв на монтажке (это FM31278/FM31T378) не сбоит никогда.

Цитата(Jury093 @ Apr 4 2017, 11:37) *
проблемы ушли - смотреть пути наводки по эфиру.. не знаю, что такое esp8266, видимо что-то радиосодержащее - возможно есть регистр регулировки мощности передатчика..

Это WiFi-чип с подключением по UART. У меня он в виде отдельного модуля.
Эфирные наводки от радиочасти должны быть не при чём вроде. Так как ESP8266 сконфигурирован чтобы после старта не подключаться ни к какой сети и не быть точкой доступа (т.е. - просто ждёт AT-команд).
И для теста даётся команда AT+GMR - это запрос информации о прошивке (версия и т.п.), по этой команде вроде приёмник/передатчик включать не надо. И уже на эту команду происходит сбой.
Мощность передатчика регулируется программно.
ESP8266 при работе по эфиру потребляет прилично - становится горячим на ощупь когда открыт сокет и через него идёт поток данных.

Цитата(Jury093 @ Apr 4 2017, 11:37) *
нельзя ли временно на соплях отцепить stm32 и подключить LPC на i2c дефективной платы?

Сейчас вроде появился какой-то прогресс!
Я сделал немного по-другому - постарался максимально возможно повторить конфигурацию проводов как было с платой LPC.
К LPC-ной плате у меня ESP8266 подключался отдельно от монтажной платы, отдельным многожильным кабелем длиной порядка 15 см. При переходе же на STM32 я расположил разъём для ESP8266 на монтажной плате.
Сейчас попробовал воткнуть ESP8266 не напрямую в этот разъём, а через кабель длиной примерно 15см - и о чудо - сбои по I2C почти пропали!!!
За последние 15 минут теста всего один раз сбойнуло. До этого буквально максимум после 10сек после начала теста следовал сбой. (тест - периодическая посылка команды AT+GMR к ESP8266).
Похоже надо во все провода к ESP8266 добавить последовательные резисторы ом на 50.
Go to the top of the page
 
+Quote Post
Jury093
сообщение Apr 4 2017, 14:07
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(jcxz @ Apr 4 2017, 14:30) *
Сейчас попробовал воткнуть ESP8266 не напрямую в этот разъём, а через кабель длиной примерно 15см - и о чудо - сбои по I2C почти пропали!!!
За последние 15 минут теста всего один раз сбойнуло. До этого буквально максимум после 10сек после начала теста следовал сбой. (тест - периодическая посылка команды AT+GMR к ESP8266).

хорошо.. еще варианты:
- на контакты питания esp8266 навесить 22-50uF
- для теста закормить плату с esp8266 от отдельного стабилизатора, в идеале только esp8266
- в точке подключения пуллапов i2c к +3в3 временно припаять кондей на 10uF, у вас два комплекта пуллапов, тогда и на второй тоже свой кондей - может удасться этим отсечь возможный путь для помех..

Цитата(Sanya_kv @ Apr 4 2017, 09:07) *
У Вас возможно та же проблема из-за Wi-Fi модуля, у него броски потребления до 40 мА.

насчет бросков не знаю, но в топе потребляет:

Tx802.11b, CCK 11Mbps, P OUT=+17dBm - 170 - mA
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 9 2017, 15:41
Сообщение #7


Гуру
******

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



Цитата(Jury093 @ Apr 4 2017, 16:07) *
- на контакты питания esp8266 навесить 22-50uF
- для теста закормить плату с esp8266 от отдельного стабилизатора, в идеале только esp8266
- в точке подключения пуллапов i2c к +3в3 временно припаять кондей на 10uF, у вас два комплекта пуллапов, тогда и на второй тоже свой кондей - может удасться этим отсечь возможный путь для помех..

Это всё делалось - ничего не помогло.
Написал тесты плотной работы со всеми слэйвами на шине, запускал эти тесты на несколько часов: если без обмена с ESP8266 - работало пару суток без единого сбоя, за это время на I2C-FRAM-ку записалось несколько гигабайт (запись-чтение-проверка) и с другими I2C-слэйвами было много операций.
Как только включаешь обмен с ESP8266 - не позднее чем через минуту следует сбой, а обычно - уже через несколько секунд.
Перепробовал разные подтяжки, скорости по I2C, конденсаторов кучу навесил, резисторы 50 Ом последовательно на все сигналы ESP8266, пробовал отдельно запитывать ESP, дросселя на питание (и на GND) - ничего не помогало. sad.gif(((((
Сейчас вдруг решил поменять режим ноги SCL на МК на push-pull вместо open-drain. И все проблемы исчезли! Работает ещё недолго, но уже полчаса прошло - такого ещё не было.
Достаточно ничего не меняя опять вернуть open-drain ножке SCL - сразу начинает сбоить.

Это конечно неправильно и противоречит спецификации I2C, но ничего не поделаешь - оставлю наверное push-pull для SCL. sad.gif
Без ESP8266 и с open drain нормально работает, но.... sad.gif(((
Go to the top of the page
 
+Quote Post
Obam
сообщение Apr 9 2017, 15:57
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(jcxz @ Apr 9 2017, 19:41) *
Сейчас вдруг решил поменять режим ноги SCL на МК на push-pull вместо open-drain. И все проблемы исчезли! Работает ещё недолго, но уже полчаса прошло - такого ещё не было.
Достаточно ничего не меняя опять вернуть open-drain ножке SCL - сразу начинает сбоить.

Как честный человек, вы просто обязаны предоставить сообществу осциллограммы обоих случаев (;


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 9 2017, 16:56
Сообщение #9


Гуру
******

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



Цитата(Obam @ Apr 9 2017, 17:57) *
Как честный человек, вы просто обязаны предоставить сообществу осциллограммы обоих случаев (;

Я бы предоставил. Но лень осциллограф тащить сюда sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- jcxz   STM32F4: Помехи по I2C.   Apr 3 2017, 10:56
|- - 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
|- - 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
- - AnatolyT   Осциллограммы посмотреть можно, чтобы убедиться в ...   Apr 11 2017, 22:07
|- - jcxz   Насчёт осцилла: так как проблема потеряла остроту ...   Apr 12 2017, 09:37
|- - 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
|- - 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


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

 


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


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