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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32F103 + 24LC256, I2C модуль в реальной среде
OVladimir
сообщение Jan 21 2009, 21:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 10-01-07
Из: Вильнюс
Пользователь №: 24 290



Здравствуйте

Есть готовое изделие, один из элементов которого является ЕЕПРОМ 24LC256 производителя МАЙКРОЧИП с которым общается STM32F103 через I2C. Изделие питается от другого изделия и обменивается информацией с ним через 4х проводную нестандартную магистраль (GND, +12V, Data, CLK). На столе, вне зависимости от длины магистрали пишет и читает ЕЕПРОМ хорошо, но в реальных условиях (магистраль проложена в помещении и отчётливо наблюдаются (~300 mV) наводки 50Hz на жилах питания +12) работа с ЕЕПРОМ (в основном чтение) проходит с множеством ошибок, в остальных задачах всё в порядке. Напряжение 3V3 стабильное.
Может кто-нибудь сможет определить в какую сторону копать?
Go to the top of the page
 
+Quote Post
sgrig
сообщение Jan 22 2009, 09:51
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-11-05
Из: Tomsk
Пользователь №: 10 464



Для начала ГОСТ Р 51522—99 (МЭК 61326-1—97) и Дж.Барнс "Электронное конструирование: методы борьбы с помехами".
У FUJITSY есть классная аппликуха "EMC design guide"
В 90% случаев достаточно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 22 2009, 12:17
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Подтяжки на I2C есть? И если есть, какого номинала?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 22 2009, 13:15
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Недавно ковырялся с I2C тут у себя, макетка с проводниками длинной около 20 см, подтягивающие резисторы номиналом ~2.5к, питание 3.3 вольт.
При этом был весьма пологий нарастающий фронт, и частота вместо 400 около 370 кГц.

Интересно, в интерфейсе заложен механизм автоматического снижения частоты от качества сигнала?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 22 2009, 13:49
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(sonycman @ Jan 22 2009, 18:15) *
Интересно, в интерфейсе заложен механизм автоматического снижения частоты от качества сигнала?
Нет. В спецификации I2C только нормируется максимальная емкость линий шины и времена нарастания/спада сигналов при максимальной частоте тактирования (100кГц или 400кГц или 3,4МГц).
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 22 2009, 14:06
Сообщение #6


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(rezident @ Jan 22 2009, 17:49) *
Нет. В спецификации I2C только нормируется максимальная емкость линий шины и времена нарастания/спада сигналов при максимальной частоте тактирования (100кГц или 400кГц или 3,4МГц).

Ну вот в моём случае время нарастания сигнала SCL превышало 300 нс (на всём участке от 0 до 3.3 вольт).
Это могло способствовать снижению частоты?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 22 2009, 21:38
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sonycman @ Jan 22 2009, 16:06) *
Это могло способствовать снижению частоты?
Если мастер грамотный - то могло. Мастер отпускает SCL и какое-то время считывает с нее ноль. Он воспринимает это как попытку слейва попридержать CLK.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
cebotor
сообщение Jan 22 2009, 22:10
Сообщение #8


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

Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809



Цитата(Сергей Борщ @ Jan 23 2009, 00:38) *
Если мастер грамотный - то могло. Мастер отпускает SCL и какое-то время считывает с нее ноль. Он воспринимает это как попытку слейва попридержать CLK.

проверено придерживая вручную - останавливается передача корректно возобновляясь потом именно на этом камне - это значит что мастер здесь грамотный так ?


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 22 2009, 22:15
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(cebotor @ Jan 23 2009, 03:10) *
проверено придерживая вручную - останавливается передача корректно возобновляясь потом именно на этом камне - это значит что мастер здесь грамотный так ?
Это всего лишь соответствие спецификации I2C. Шина I2C полностью статическая, т.е. минимальная частота тактирования допускается вплоть до 0Гц.
Go to the top of the page
 
+Quote Post
cebotor
сообщение Jan 23 2009, 12:22
Сообщение #10


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

Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809



Цитата(rezident @ Jan 23 2009, 01:15) *
Это всего лишь соответствие спецификации I2C. Шина I2C полностью статическая, т.е. минимальная частота тактирования допускается вплоть до 0Гц.

вопрос в том что тактирует мастер а тактовую приостанавливает слэйв(тормозит фронт CLK на нуле ), и мастер должен не слепо долбить дальше а остановиться, пока на реальном проводе не возникнет единица. так что толковый мастер будет тактировать и тактироваться одновременно (ИМХО) . Это есть в спецификации ? или это просто толковая реализация мастера ?


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 23 2009, 12:40
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(cebotor @ Jan 23 2009, 14:22) *
Это есть в спецификации ?
Да, есть. Раздел 8.1 Synchronization
Цитата
However, the LOW to HIGH transition of this clock may not change the state of the SCL line if another clock is still within its LOW period. The SCL line will therefore be held LOW by the device with the longest LOW period. Devices with shorter LOW periods enter a HIGH wait-state during this time.
When all devices concerned have counted off their LOW period, the clock line will be released and go HIGH. There will then be no difference between the device clocks and the state of the SCL line, and all the devices will start counting their HIGH periods. The first device to complete its HIGH period will again pull the SCL line LOW.
In this way, a synchronized SCL clock is generated with its LOW period determined by the device with the longest clock LOW period, and its HIGH period determined by the one with the shortest clock HIGH period.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 23 2009, 12:55
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(cebotor @ Jan 23 2009, 17:22) *
Это есть в спецификации ? или это просто толковая реализация мастера ?
Сергей Борщ, уже ответил. Но мне странно, что у вас возникают такие вопросы. Я же вам дал ссылку на спецификацию I2C в посте #5. Вы ее читали?
Go to the top of the page
 
+Quote Post
cebotor
сообщение Jan 23 2009, 13:32
Сообщение #13


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

Группа: Свой
Сообщений: 135
Регистрация: 6-04-07
Из: Бронницы
Пользователь №: 26 809



Цитата(rezident @ Jan 23 2009, 15:55) *
Сергей Борщ, уже ответил. Но мне странно, что у вас возникают такие вопросы. Я же вам дал ссылку на спецификацию I2C в посте #5. Вы ее читали?

Извините этот пост был ответом не мне и конкретное место спецификации,которое процитировал Сергей Борщ не было мной вспомнено, пока я не прочитал цитату.( вопросы задавали два разных человека а не один "медленный газ":)


--------------------
если еррата пуста - это не хорошо а плохо
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 23 2009, 14:30
Сообщение #14


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(rezident @ Jan 23 2009, 02:15) *
Это всего лишь соответствие спецификации I2C. Шина I2C полностью статическая, т.е. минимальная частота тактирования допускается вплоть до 0Гц.

Таким образом "тормозить" CLK может не только слэйв, а ещё и слишком медленное нарастание фронта?
Так как в моём случае слэйв высокоскоростной (AT24C02B) и не должен удлиннять CLK.

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

Уменьшение номиналов подтягивающих резисторов (с 4к7 до 3к3) немного прибавило в скорости.
А по спецификации для моих условий допускаются пуллапы сопротивлением вплоть до 1к.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 23 2009, 16:21
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(sonycman @ Jan 23 2009, 19:30) *
Так как в моём случае слэйв высокоскоростной (AT24C02B) и не должен удлиннять CLK.
EEPROM вообще не имеет возможности "удлинять" длительность нуля SCL, т.к. SCL у нее это чистый вход!
Цитата(sonycman @ Jan 23 2009, 19:30) *
Возможно, и щупы осциллографа своей ёмкостью влияют на снижение частоты...
Для наблюдения таких сигналов (цифровых с высокой скоростью изменения) щуп осциллографа должен быть с согласованным делителем.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th July 2025 - 09:42
Рейтинг@Mail.ru


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