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

|
Цитата(vladec @ Apr 11 2017, 09:26)  Если Buse в изделии не используется, нет ни какого смысла конфигурировать SCL в режим открытого коллектора. Повторю для непонятливых: Не знаю что такое "Buse", но если это "clock stretch", то как определить: "используется в изделии" он или нет? Цитата(AnatolyT @ Apr 10 2017, 10:24)  И после этого все равно были единичные сбои, пришлось организовать обмен с подтверждением и циклическим контролем. Что Вы имеете в виду под подтверждением? Стандартный ACK? Так он и так есть. И что такое "циклический контроль"? Свой протокол обмена по I2C я накрутить не могу - у меня связь не между двумя МК. Сбои идут в виде: NACK на передачу адреса слэйва; arbitration lost, bus error и т.п. Можно конечно усложнить драйвер I2C - добавить обработку этих ситуаций, в виде повторных транзакций и т.п. Но неохота это делать, ибо: во 1-х - получается громоздко; во-2-х - считаю принципиально неверным подход придумывания костылей по устранению последствий вместо лечения самой причины (а причина - аппаратная, а не программная). Цитата(AnatolyT @ Apr 10 2017, 10:24)  По всей видимости i2c, организованный на этом порте, может работать в режиме мастера, и все равно это нарушение протокола i2c. Он и работает в режиме мастера всегда. Других мастеров на шине нет. Про "clock stretching" знаю. Надеюсь мои слэйвы его не используют. Цитата(Сергей Борщ @ Apr 11 2017, 12:06)  Ребята, а давайте читать тему целиком, а не только последнее сообщение? Спасибо
|
|
|
|
|
Apr 11 2017, 11:08
|
Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877

|
Цитата(jcxz @ Apr 11 2017, 13:56)  Повторю для непонятливых: Не знаю что такое "Buse", но если это "clock stretch", то как определить: "используется в изделии" он или нет? 1) клоки посмотреть. в норме должны стоять ровные посылки по 9 клоков с паузой. если конечно пауза есть. в середине посылки если есть дрожание - это уже намек на стретч. 2) можно врезать резистор в цепь клока. и на нем будет видно - просаживает ли слейв свой конец или нет.
|
|
|
|
|
Apr 11 2017, 11:18
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AlexRayne @ Apr 11 2017, 13:08)  1) клоки посмотреть. в норме должны стоять ровные посылки по 9 клоков с паузой. если конечно пауза есть. в середине посылки если есть дрожание - это уже намек на стретч. Это слишком трудоёмко + не даёт гарантированного результата. Ибо - задержка клока слэйвом может производиться по его внутренней логике, которую я не знаю. Не всегда, а только в определённых ситуациях. Например: Часы RTC, запись нового значения - теоретически может быть выставлен "clock stretch" если момент записи точно попал в момент обновления внутренних регистров, на время до окончания обновления. Вероятность попадания очень мала и поймать такой случай на осциллографе не получится. Этот пример просто как предположение, но можно напридумывать кучу других ситуаций. Не зная внутренней схемы устройства слэйва, узнать в каких случаях он использует "clock stretching" невозможно. PS: Да и вопрос мой был риторический. Просто товарищ не читает ответов ему, а повторяет одно и то же.
|
|
|
|
Сообщений в этой теме
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 Сергей Борщ QUOTE (vladec @ Apr 11 2017, 10:26) нужен... Apr 11 2017, 09:03  KnightIgor Цитата(Сергей Борщ @ Apr 11 2017, 10:03) ... Apr 11 2017, 09:11   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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|