|
I2C - проблема, сбои в работе |
|
|
|
Dec 3 2014, 14:25
|
Местный
  
Группа: Свой
Сообщений: 258
Регистрация: 3-08-04
Пользователь №: 434

|
Здравствуйте все! Вопрос у меня по поводу интерфейса I2C, связывающего импульсный блок питания с процессором STM32F407. Процессор в режиме мастера, говорит с железкой, в которой 3 блока питания на общей шине I2C. Пока блоки были на столе, без железки - т.е. соединения SDA и SCL между блоками было сделано просто проводами - все было ОК. Как только блоки внутри железки, они там воткнуты во внутреннюю печатную плату, соединения выполнены в виде дорожек на ней - начались проблемы. Выглядит это таким образом. Процессор в режиме Master RX читает содержимое простого регистра PCF6574 внутри блока питания - и вдруг начинает читать FF. Я смотрю на шину SDA - действительно высокий уровень, и только ACK от мастера - он, типа, продолжает читать... Смотрю на SCL - и вижу, перед этим событием - был будто-бы пропуск клока, т.е. передний фронт клока задержался на пол-периода! Стал исследовать, обращаюсь к несуществующим адресам - вижу те-же пропуски клока... Эффект пропадает либо при отключении линии SCL от блока питания (еще раз повторю, я обращаюсь не к нему, поетому могу играться), либо при выключении блока питания.
Видимо, это связано с наводкой на SCL сигнал от импульсника (но я ничего криминального не вижу на скопе) - но КАК Мастер об этом знает? Как можно прервать передачу в произвольный момент? Это выглядит как "SCL Stretching", но ведь это релевантно только для Slave? Да, я забыл сказать - источник пропуска именно процессор, я это вижу по уровню сигнала. Видел ли кто такое? Куда глядеть, как Вы думаете?
Спасибо
|
|
|
|
|
 |
Ответов
|
Dec 3 2014, 15:16
|
Местный
  
Группа: Свой
Сообщений: 258
Регистрация: 3-08-04
Пользователь №: 434

|
QUOTE (kovigor @ Dec 3 2014, 19:03)  "Земля" нигде не разорвана ? Т.е., все ли абоненты шины имеют общую землю ? Подтягивающие резисторы на линиях интерфейса есть ? Если да, то какого номинала ? Возможно ли в порядке эксперимента заменить импульсный БП линейным или даже обычным аккумулятором ? Спасибо за ответ, Земля вроде общая. Резисторы 4.7К Насчет заменить - извините, я не уточнил. Сейчас плата с процессором запитана от отдельного линейного лабораторного блока питания, импульсник - это абонент на I2C, его выходное напряжение вообще никуда не идет (сейчас). Только питает его собственную электронику (я имею в виду I2C микрошемы внутри источника).
|
|
|
|
|
Dec 4 2014, 06:18
|
Местный
  
Группа: Свой
Сообщений: 258
Регистрация: 3-08-04
Пользователь №: 434

|
QUOTE (kovigor @ Dec 3 2014, 18:26)  Самодельный ? Если да, то насколько корректно он сделан, включая разводку ПП ? Можно ли его заменить, например, аккумулятором ? Нет, увы - не самодельный, иначе бы я хоть представлял разводку его платы. Смысл такой - моя плата связана по I2C с готовым модулем, содержащим 3 "рэка". Каждый рэк содержит 3 независимых импульсника. Каждый импульсник имеет I2C для чтения его параметров. это я вообще описываю устройство. Я сейчас работаю только с одним рэком, внутри которого установлен только один импульсник. Плата питается от отдельного лабораторного источника. Подтягивающие резисторы установлены на плате, на ее питание 5В. Сама проблема. Рэки есть 2-х типов. Первый - каждый блок питания, входящий в рэк, имеет отдельный коннектор для подключения I2C, и соединение SCL, SDA выполнено отдельным внешним кабелем. С этим рэком проблем нет. Второй тип рэка имеет один коннектор, и соединения SCL, SDA выполнены на внутренней печатной плате, в которую вставлены источники. Разводка этой платы мне не известна - но понятно, что соединения выполнены длинными дорожками на всю длину рэка (сантиметрое 40). Вот с этим типом рыка появляется проблема, что при чтении серии байтов - начиная с какого-то момента, я получаю "FF". Сннхронизируя скоп, я вижу, что перед этим произошел как-бы "clock stretching", т.е. положительный фронт клока как бы задержан на пол-периода... И видимо, начиная с этого момента, "slave" останавливает обмен, а мастер - ничего не подозревая, продолжает гнать клок, давать ACK и т.д. Кстати, этот момент может наступить в совершенно случайном месте - например, при выдаче мастером адреса слэйва - тогда просто мастер, не получив ACK, завершает обмен по таймауту. Мастер - процессор STM32F407. Вот такая проблема...
|
|
|
|
|
Dec 4 2014, 06:56
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(Igor_S @ Dec 4 2014, 09:18)  Смысл такой - моя плата связана по I2C с готовым модулем, содержащим 3 "рэка". Каждый рэк содержит 3 независимых импульсника. Каждый импульсник имеет I2C для чтения его параметров. это я вообще описываю устройство. Я сейчас работаю только с одним рэком, внутри которого установлен только один импульсник. 1. попробовать снизить скорость обмена по i2c 2. взять что-то типа i2c eeprom, привесить на ту же шины и посмотреть на поведение 3. в БП чипы точно слейвы? мало ли кто-то из них умеет мастерить.. 4. как вариант - в разрыв поставить i2c levelshifter (типовая схема у филипса) 5. как радикальный - опторазвязку на i2c
|
|
|
|
Сообщений в этой теме
Igor_S I2C - проблема Dec 3 2014, 14:25     Igor_S QUOTE (Jury093 @ Dec 4 2014, 10:56) 1. по... Dec 4 2014, 07:30      Сергей Борщ Цитата(Igor_S @ Dec 4 2014, 09:30) я четк... Dec 4 2014, 08:27       Igor_S QUOTE (Сергей Борщ @ Dec 4 2014, 12:27) ... Dec 4 2014, 09:07        Jury093 Цитата(Igor_S @ Dec 4 2014, 12:07) Просто... Dec 4 2014, 09:50        Сергей Борщ Цитата(Igor_S @ Dec 4 2014, 11:07) Это ве... Dec 4 2014, 09:55         Igor_S QUOTE (Сергей Борщ @ Dec 4 2014, 13:55) Р... Dec 4 2014, 10:41          Jury093 Цитата(Igor_S @ Dec 4 2014, 13:41) Jury, ... Dec 4 2014, 10:48           Igor_S QUOTE (Jury093 @ Dec 4 2014, 14:48) а мас... Dec 4 2014, 11:37            Jury093 Цитата(Igor_S @ Dec 4 2014, 14:37) Но я и... Dec 4 2014, 12:10 A. Fig Lee Чтото похожее было с SPI у Майкрочипа.
Лечилось по... Dec 4 2014, 12:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|