Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопрос по I2C в SAM7X256
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
athlon64
Необходимо на SAM7X256 в режиме мастера опрашивать устройство по I2C (устройство сделано на меге8, представляет собой БП с контролем напряжения, умеет выдавать его по I2C, работает в режиме слейв, обеспечивает подтяжку к +12В). В качестве буфера применил P82B96 (проверил, уровни верные).
За основу взял пример basic-twi-eeprom-project, стандартные библиотеки twi и twid. После инициализации TWI уровни TWCK и TWD +12В, как положено.
Код
#define TWCK            100000
    AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TWI;//AT91C_ID_TWI;
    TWI_ConfigureMaster(AT91C_BASE_TWI, TWCK, BOARD_MCK);
    TWID_Initialize(&twid, AT91C_BASE_TWI);


После попытки прочитать чтолибо из устройтва SAM7X256 роняет уровни TWCK и TWD до 0В и держит. Байты не передаёт. Посылка бита STOP в TWI линии не отпускает. Естесственно флаг принятого байта от устройства не выставляется. В асинхронном режиме не попадаем в прерывание по принятому байту, в синхронном циклимся ожидая байт (убрал проверку таймаута, иначе постоянный таймаут).

Пробовал циклить чтение из устройства
Код
while(1)
TWID_Read(&twid, 0x08, 0, 0, pData, 8,0);

смотрел что творится на TWI осциллографом - обе линии лежат в нуле и не шевелятся. На команду STOP реакции нет.
Сорри за сумбур, формулировал в торопях.
В чём может быть проблема?
aaarrr
Воспользуйтесь поискои. Или не пользуйтесь, а просто делайте программный I2C, аппаратный на SAM7S и X работоспособен весьма условно.
athlon64
Программную реализацию делать не хотелось бы, очень уж часто придётся отвлекаться на опрос по I2C, а ещё есть куча других рассчётов и обмен по другим интерфейсам.
Поиском пользуюсь, но ничего по моей проблеме не нахожу. Может быть есть у кого-нибудь рабочая реализация асинхронного обмена по I2C для такого процессора с чем то кроме атмеловского eeprom?
athlon64
При выполнении
Код
TWI_StartWrite(AT91C_BASE_TWI, 0x08, 0x08, 1, 0x00);

На шину выдаётся START, после чего оба сигнала лежат на нуле.
athlon64
Попробовал реализовать программный I2C - сигналы зашевелились, получилось передать слейву простейший пакет с его адресом. Теперь слейв перестал стоять в ошибке изза отсутствия опроса. Не получается ничего прочитать из слейва. Видимо не правильно перевожу ногу TWDA в режим входа. И остался вопрос как организовать правильные тайминги? Т.к. периодически слейв всё таки теряет "опрос", встаёт в ошибку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.