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

 
 
> SAM7 + Mega8 и I2C
beer_warrior
сообщение Mar 10 2007, 17:35
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Работаю со связкой - SAM7 + Mega8. SAM7 пишет управляющий байт и читает байт статуса.
И вот интересная картина получается. Поставил как возврат статуса константу 0x55.
1. После включения питания первое чтение 0x55, второе 0xFF, все последующие - 0x55.
2. После записи первое чтение 0xFF, все последующие - 0x55.

На код грешить боюсь - для связки мега-мега обкатан многократно. SAM7 без особых проблем работает с 24с02 на той же шине.

Мне кажется допускаю какую-то логическую неувязку в работе с шиной.(Не закрываю обмен или что-то подобное)


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
beer_warrior
сообщение Mar 10 2007, 23:34
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Я бы в Вашем коде тоже кое-что поменял.

Согласен, код писан 3 года назад и с тех пор кочует по проектам. Вижу косяки, только руки не доходят преписать.

Цитата
основная проблема TWI на SAM7 это то, что он работает в "синхронном" режиме То есть ему глубоко наплевать на то что мега держит линию SCL в 0(пока данные не готовы)и у него (SAM7) весь трансфер происходит "синхронно"то есть SAM7 вобще не мониторит состояние линии SCL перед тем как начать передачу!

Опс! Спасибо за наколку. Как-то внимания не обращал.


Цитата
По этому просьба, перешлите мне последовательность обращения к eeprom Возможно это поможет понять все тонкости


Да вобщем то я уже дал запись. Дам и чтение -
Код
void AT24ReadMem(DWORD addr, BYTE* src, DWORD len)
{
//DWORD AT24_Read(BYTE* data, BYTE dadr, DWORD address,  DWORD size)
unsigned int status;
// Set the TWI Master Mode Register
AT91C_BASE_TWI->TWI_MMR = (0x50 << 16)| AT91C_TWI_IADRSZ_2_BYTE | AT91C_TWI_MREAD;    
// Set TWI Internal Address Register
AT91C_BASE_TWI->TWI_IADR = addr;
// Start transfer
AT91C_BASE_TWI->TWI_CR = AT91C_TWI_START;
status = AT91C_BASE_TWI->TWI_SR;
while (len-- >1)
    {
    // Wait RHR Holding register is full
    while (!(AT91C_BASE_TWI->TWI_SR & AT91C_TWI_RXRDY));
    // Read byte
    *(src++) = AT91C_BASE_TWI->TWI_RHR;
    }
AT91C_BASE_TWI->TWI_CR = AT91C_TWI_STOP;
status = AT91C_BASE_TWI->TWI_SR;
// Wait transfer is finished
while (!(AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP));
// Read last byte
*src = AT91C_BASE_TWI->TWI_RHR;
}


Честно признаюсь, что этот фрагмент содран где-то на Сахаре.
Благополучно прожил в нескольких проектах. А вот запись повела себя ненадежно поэтому была переделана под байтовый обмен.

А какой формат обмена у вас?
адрес -> внутренний адрес-> данные
или
адрес -> вычитывание большого блока


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 11 2007, 02:23
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(beer_warrior @ Mar 10 2007, 23:34) *
А какой формат обмена у вас?
адрес -> внутренний адрес-> данные
или
адрес -> вычитывание большого блока

скорее вот этот
адрес -> вычитывание большого блока

на самом деле много байтиков туда(SAM->mega)
и много байтиков обратно (SAM<-mega)
внутреняя адресация в SAM не используется

SAM->mega вобще без проблем
mega->SAM с вышеописанным глюком
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- beer_warrior   SAM7 + Mega8 и I2C   Mar 10 2007, 17:35
- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 17:35)...   Mar 10 2007, 18:07
- - beer_warrior   SAM работает поллингом, проще некуда: Кодbool Read...   Mar 10 2007, 19:09
- - beer_warrior   Еще интересный эффект всплыл. Попробовал в промежу...   Mar 10 2007, 19:40
|- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 19:40)...   Mar 10 2007, 20:02
- - beer_warrior   Код//---------------------------------------------...   Mar 10 2007, 20:14
|- - singlskv   для начала попробуйте вот так: Цитата(beer_warrior...   Mar 10 2007, 20:28
- - beer_warrior   ЦитатаTWI_RHR; // !!!!!!...   Mar 10 2007, 20:35
|- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 20:35)...   Mar 10 2007, 21:26
- - beer_warrior   ЦитатаТак что искать логику в TWI на SAM7 нет смыс...   Mar 10 2007, 21:47
|- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 21:47)...   Mar 10 2007, 22:06
- - beer_warrior   Значит так, проблема решена следующим образом: Код...   Mar 10 2007, 22:13
|- - singlskv   Цитата(beer_warrior @ Mar 10 2007, 22:13)...   Mar 10 2007, 22:49
- - beer_warrior   ЦитатаЯ думаю что переносить пока рано С мегой там...   Mar 10 2007, 22:37
- - singlskv   ЦитатаЦитата основная проблема TWI на SAM7 это то,...   Mar 11 2007, 01:42
- - beer_warrior   Цитата"Модуль TWI прекрасно подходит для обме...   Mar 11 2007, 11:18
|- - singlskv   Цитата(beer_warrior @ Mar 11 2007, 11:18)...   Mar 15 2007, 03:08
- - _dem   Кстати, решение по остановке TWI у SAM есть - про...   Aug 3 2007, 15:12
- - SasaVitebsk   Забавно иногда смотреть. Разные программисты в раз...   Aug 3 2007, 19:04
|- - singlskv   Цитата(SasaVitebsk @ Aug 3 2007, 23:04) К...   Aug 3 2007, 22:14
- - SasaVitebsk   Мужчина!   Aug 4 2007, 18:52
|- - singlskv   Цитата(SasaVitebsk @ Aug 4 2007, 22:52) М...   Aug 4 2007, 19:26
- - Kirill Frolov   Цитата(beer_warrior @ Mar 10 2007, 21:35)...   Aug 6 2007, 23:33


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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 18:52
Рейтинг@Mail.ru


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