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

 
 
 
Reply to this topicStart new topic
> вопрос по I2C в SAM7X256, проблемы с реализацией
athlon64
сообщение Apr 22 2010, 07:32
Сообщение #1


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

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Необходимо на 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 реакции нет.
Сорри за сумбур, формулировал в торопях.
В чём может быть проблема?


--------------------
Руслан
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 22 2010, 08:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Воспользуйтесь поискои. Или не пользуйтесь, а просто делайте программный I2C, аппаратный на SAM7S и X работоспособен весьма условно.
Go to the top of the page
 
+Quote Post
athlon64
сообщение Apr 23 2010, 02:09
Сообщение #3


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

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Программную реализацию делать не хотелось бы, очень уж часто придётся отвлекаться на опрос по I2C, а ещё есть куча других рассчётов и обмен по другим интерфейсам.
Поиском пользуюсь, но ничего по моей проблеме не нахожу. Может быть есть у кого-нибудь рабочая реализация асинхронного обмена по I2C для такого процессора с чем то кроме атмеловского eeprom?


--------------------
Руслан
Go to the top of the page
 
+Quote Post
athlon64
сообщение Apr 23 2010, 04:15
Сообщение #4


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

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



При выполнении
Код
TWI_StartWrite(AT91C_BASE_TWI, 0x08, 0x08, 1, 0x00);

На шину выдаётся START, после чего оба сигнала лежат на нуле.
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Руслан
Go to the top of the page
 
+Quote Post
athlon64
сообщение Apr 23 2010, 07:00
Сообщение #5


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

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Попробовал реализовать программный I2C - сигналы зашевелились, получилось передать слейву простейший пакет с его адресом. Теперь слейв перестал стоять в ошибке изза отсутствия опроса. Не получается ничего прочитать из слейва. Видимо не правильно перевожу ногу TWDA в режим входа. И остался вопрос как организовать правильные тайминги? Т.к. периодически слейв всё таки теряет "опрос", встаёт в ошибку.

Сообщение отредактировал athlon64 - Apr 23 2010, 07:04
Прикрепленные файлы
Прикрепленный файл  main.zip ( 1.44 килобайт ) Кол-во скачиваний: 56
 


--------------------
Руслан
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st June 2025 - 08:47
Рейтинг@Mail.ru


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