Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: at24cxxx eeprom - i2c проблема при первом запросе
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Цифровые схемы, высокоскоростные ЦС
andron86
Привет всем!

вот скатилась на меня беда, подкинули мне проблему. В общем, есть уже запущенный в производство прибор. Вот тут его составляющие:

Cyclone, Nios 2 (i2c мастер); hwclock (i2c), ad converter(i2c) и at24c512 (i2c).

Для выпуске была разработана тестовая платформа, которую программил коллега.
Тесты в общем элементарные - программируется сам прибор и проверяется вся периферия. Из десяти приборов 8-9 at24с512 еепромов выпадают при первой попытке их запрограммировать (нету ака) - при повторном запуске всё работает. Первый баг я уже нарыл - при залитие софта в cyclone не производился ресет системы - i2с отдыхал. Теперь имеем из 10 новых один вылетает при первой попытке. Что за беда??
i2c 400khz, подтянут 10k, wp деактивируется, адресса в порядке - может здесь что-то?? Думал может еепром soft reset нужен, но с ресетом вывалился в обратную статистику. Занимаюсь этой бедой один день, может чего-то ещё не доглядел. Подскажите пожалуйста куда обратить внимание!

Спасибо!

З.Ы. ещё сам не дебагил, по этому про аск верю коллеге на слово - он в низкоуровневым программировании и в железе бум бум. Он писал аппликацию с использованием готовых функций типа: write_i2, read_i2c c return аcк no ack.
rezident
Во-первых, уменьшите pull-up-ы на шинах SCL и SDA до 1-2кОм. 10кОм для шины 400кГц может быть многовато. Посмотрите осциллографом нарастающие фронты и сравните их длительность с требованиями стандарта The I2C bus specification.
Во-вторых, что за soft reset? После включения устройства рекомендуется "поКлокать" шиной SCL, не содавая START или STOP условий. Не менее 10 тактов. Этот прием позволяет правильно установить аппаратные автоматы I2C в слейвах, не имеющих собственных сигналов тактирования (которые тактируются только от SCL). Как раз при таком "залипании" slave не дает ACK.
В-третьих, откуда ваш коллега брал "аппликацию с использованием готовых функций"? Источник проверенный? Или с какого-нибудь опен-сорсного ресурса скачано? wink.gif
andron86
Цитата(rezident @ Oct 26 2007, 23:17) *
Во-первых, уменьшите pull-up-ы на шинах SCL и SDA до 1-2кОм. 10кОм для шины 400кГц может быть многовато. Посмотрите осциллографом нарастающие фронты и сравните их длительность с требованиями стандарта The I2C bus specification.

Да, про это я сразу же и подумал, но тот кто это проектировал сразу же в ступор обратился с криком «ведь потом всё работает» 08.gif
Цитата(rezident @ Oct 26 2007, 23:17) *
Во-вторых, что за soft reset?

Да с даташеет от без из сходности 08.gif
Цитата
MEMORY RESET: After an interruption in protocol, power loss or system reset, any twowire
part can be reset by following these steps:
(a) Clock up to 9 cycles, (b ) look for SDA high in each cycle while SCL is high and then
(c ) create a start condition as SDA is high.


Цитата(rezident @ Oct 26 2007, 23:17) *
После включения устройства рекомендуется "поКлокать" шиной SCL, не содавая START или STOP условий. Не менее 10 тактов.


wow!!! вот это идея !!!

Спасибо rezident


Цитата(rezident @ Oct 26 2007, 23:17) *
В-третьих, откуда ваш коллега брал "аппликацию с использованием готовых функций"? Источник проверенный? Или с какого-нибудь опен-сорсного ресурса скачано? wink.gif

smile.gif smile.gif Другой коллега писал что-то типа драйвера, но он не на месте, а мне в понедельник в командировку по этому вопросу - вот беда crying.gif
rezident
Цитата(andron86 @ Oct 27 2007, 03:45) *
wow!!! вот это идея !!!

Дык у вас в даташите под пунктом а) то же самое написано smile.gif
Цитата
(a) Clock up to 9 cycles

Только там "до 9" предлагается, а я рекомендую всегда именно 10 клоков делать.
andron86
Цитата(rezident @ Oct 26 2007, 23:49) *
Дык у вас в даташите под пунктом а) то же самое написано smile.gif

Только там "до 9" предлагается, а я рекомендую всегда именно 10 клоков делать.

А клокать нужно обезательно с рабочей частотой или без разницы.
rezident
Цитата(andron86 @ Oct 27 2007, 03:54) *
А клокать нужно обезательно с рабочей частотой или без разницы.

Без разницы, но не выше максимально допустимой (400кГц для вашего случая). Вниз ограничения нет, т.к. I2C полностью статическая шина, в отличие, например, от SMBus.
andron86
Цитата(andron86 @ Oct 26 2007, 23:54) *
А клокать нужно обезательно с рабочей частотой или без разницы.

Я спрашиваю это потому, что там такая ситуация. Коллега программирует через Labview, на железо имеет доступ в виде write read :-( . То есть я ему объесняю "можешь пин low/high посадить" - тот - "да" - я ему типа - "зделай такую секуенц" - он делает (щас умру с со смеху lol.gif ) У меня другие проекты, поэтому не хотелось бы в глубь лезть! lol.gif Ну вы представляете себе какие там задержки!!!!
rezident
Цитата(andron86 @ Oct 27 2007, 04:17) *
То есть я ему объесняю "можешь пин low/high посадить" - тот - "да" - я ему типа - "зделай такую секуенц" - он делает (щас умру с со смеху lol.gif )

Да без проблем! Можно хоть после каждого перехода low->high и high->low перекур с дремотой делать biggrin.gif Только питание не снимайте.
andron86
Цитата(rezident @ Oct 27 2007, 00:23) *
Да без проблем! Можно хоть после каждого перехода low->high и high->low перекур с дремотой делать biggrin.gif Только питание не снимайте.

спасибо rezident, буду грабить. Может ещё что в догонку подскажете, а то на производстве не будет возможности выхода в инет crying.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.