|
Вызов мастера в I2C чип LPC2131 |
|
|
|
Jan 10 2009, 10:01
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(Папа Карло @ Jan 10 2009, 13:50)  Пока сделал сканирование, но не прикольно как то. Существенное ограничение. Даже теории нет по этому вопросу... Уважаемый, Папа Карло, я бы Вам тоже рекомендовал найти дополнительную ножку у МК и пробросить на нее МГТФ-ом сигнал со слейва. Решение будет крайне простое, недорогое, абсолютно понятное всем, кто будет после Вас, и самое главное -- рабочее! А все остальное -- от Лукавого. Намаетесь больше, чем заработаете денег. Вам нужно ехать и ли Вам нужно "прикольно"?
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Jan 10 2009, 10:06
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Чтоб не создавать новый топик задам тут вопрос ещё по I2C. Пытаюсь скачать Ведущем шины у ведомого данные. Вот статусы ведущего: 08 40 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 58 Вот статусы ведомого: A8 B8 B8 B8 B8 B8 B8 B8 C8 У ведущего запрос ведомому считать до 20 символов. У ведомого в буфере строка из 7 символов для отправки ведущему. Как я заметил, ведущий прекращает приём только после считывания максимальной длинны символов в 20 штук. А ведомый отправляет, как и положено, 7 символов. Объясните пожалуйста, как мне сделать, чтоб ведущий прекратил приём при окончании символов в буфере ведомого ? Цитата(zhevak @ Jan 10 2009, 13:01)  Вам нужно ехать и ли Вам нужно "прикольно"? Мне нужно "прикольно". Я радиолюбитель !
|
|
|
|
|
Jan 10 2009, 11:26
|
Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 15-12-07
Из: Москва
Пользователь №: 33 326

|
Ведомый должен слать данные до тех пор, пока ведущий тактирует шину. Пусть ваш ведомый отсылает вначале пакета размер посылки данных, тогда вы сможете определить сколько вам еще байтов читать. Ведь вам нужен еще какой-то иначе телепатический канал, чтобы ведущий догадался, что у ведомого символы кончились. P.S. А "радиолюбитель" обязательно предполагает реализацию не по-человечески? Цитата(Папа Карло @ Jan 10 2009, 13:06)  Чтоб не создавать новый топик задам тут вопрос ещё по I2C.
Пытаюсь скачать Ведущем шины у ведомого данные.
Вот статусы ведущего: 08 40 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 58
Вот статусы ведомого: A8 B8 B8 B8 B8 B8 B8 B8 C8
У ведущего запрос ведомому считать до 20 символов. У ведомого в буфере строка из 7 символов для отправки ведущему.
Как я заметил, ведущий прекращает приём только после считывания максимальной длинны символов в 20 штук. А ведомый отправляет, как и положено, 7 символов.
Объясните пожалуйста, как мне сделать, чтоб ведущий прекратил приём при окончании символов в буфере ведомого ?
Мне нужно "прикольно". Я радиолюбитель !
|
|
|
|
|
Jan 10 2009, 12:43
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(Папа Карло @ Jan 10 2009, 16:43)  А разве Ведущий может тактировать шину, если не получен АА. Я так понял, что Ведущий качает данные, пока сам не прекратить или ведомый не выставит No Ack.
Есть 2 модуля и между ними только I2C шина. Навешивать сопли не мой вариант. Если без соплей, то тогда остается либо только "неприкольное" сканирование на предмет готовности информации у слейва, либо еще более "неприкольные" танцы с динамической конфигурацией портов и всеми вытекающими отсюда проблемами. Что там у Вас происходит на шине и почему после получения бита NOT ACK Ведущий Мастер от Ведомого Слейва продолжает тактировать, сложно сказать. Возможно, Вы что-то не так написали. Осциллографом не пробовали подловить картинку передачи седьмого байта?
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Jan 10 2009, 12:51
|
Частый гость
 
Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074

|
Осциллографа нет. Могу выложить код ведомого: Код case 0xA8://own SLA+R received, ACK returned (slave transmitter) case 0xB8://Data transmitted, ACK received if(i2c_size--) // if not last data byte transmitted { I2C0DAT = *i2c_data++; // send next data byte I2C0CONSET = 0x04;// } else { I2C0CONCLR = 0x04;// i2c_stat = 0; // i2c_size = 0; } break; case 0xC8://Last data transmitted, ACK received I2C0CONCLR = 0x04;// break; Код ведущего: Код case 0x50: *i2c_data++ = I2C0DAT; // i2c_read = 1; if(--i2c_size) // if not last data byte received { I2C0CONSET = 0x04; // set ACK bit I2C0CONCLR = 0x10; // clear "STOP" state I2C0CONCLR = 0x20; // clear "START" state } else { I2C0CONCLR = 0x04; // reset ACK bit I2C0CONCLR = 0x10; // clear "STOP" state I2C0CONCLR = 0x20; // clear "START" state i2c_stat = 0; // send transfer end flag } break; case 0x58: // slave address and RD bit transmitted. ACK not received. Data read. I2C0CONSET = 0x10; // send "STOP" state I2C0CONCLR = 0x20; // clear "START/RESTART" state i2c_stat = 0; // send transfer flag break;
|
|
|
|
|
Jan 10 2009, 19:12
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(zltigo @ Jan 10 2009, 21:54)  Вы совсем не поняли что процитировали? Тогда перечитайте то, что отцировали из моего поста - считайте, что это краткий перевод. тогда переведите вот эту фразу: Problem: I2C1 pins are currently open-drain output pins but they should be regular bi-directional GPIO pins. I2C0 pins are configured as open-drain output pins (for I2C bus compliance). Обясните что значить currently open-drain ...but ... should be regular bi-directional GPIO pins Если имеется в виду что проблема с ними как с GPIO то тогда почему это озаглавленно как проблема i2c ? А если это относится к i2с, то следует что там таки не OD на выход... заметьте что для I2C0 специально указанно "for I2C bus compliance", те все-таки нужно полагать что для I2C1 эта самая "compliance" просто отсутствует из-за баги...
|
|
|
|
|
Jan 10 2009, 19:27
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(singlskv @ Jan 10 2009, 22:12)  тогда.... Повторяю медленно и печально - это честные OD на выход. Посему они не похожи на остальные "обычные" GPIO, только это не баг а полезная (точнее обязательная) фича. На свежих LPC, правда, разумно (для внутриплатных необязательно) таким сделали только один из 2-3 I2C портов. Точно так-же правильно сделаны I2C, например, у PIC32. В отличие от Atmel-овских чипов.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|