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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Вызов мастера в I2C чип LPC2131
defunct
сообщение Jan 11 2009, 15:35
Сообщение #31


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Папа Карло @ Jan 11 2009, 13:32) *
А что такое GAP и как на него должен Мастер реагировать ?

GAP - заполнитель пустых областей (напр при форматировании дискеты, межсекторные промежутки заполняются GAP символами). Мастер должен его отбрасывать, (при получении нулевой длины сообщения, это сделать не сложно - он просто не будет ничего складывать в приемный буфер).

Цитата
Посмотрел статусы в ДШ и складывается впечатление, что при начале приёма Мастером Ведомый уже не может прервать приём у Мастера.

Именно. Поэтому только так - как я описал выше.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 11 2009, 16:35
Сообщение #32


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Пока я сделал чуть по другому.
Если ведомому нечего передавать он снимает АА.
И ведущий, при запросе сам обрывает связь при не получении АА.

Если же ведомому есть что передать, то он ставить АА.
Ведущий делает запрос и получая длинну данных скачивает именно нужное кол-во.

Может при таком подходе GAP не обязателен ?
Уш очень не хочется загрузить шину зря.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 11 2009, 22:23
Сообщение #33


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Папа Карло @ Jan 11 2009, 18:35) *
Если ведомому нечего передавать он снимает АА.
И ведущий, при запросе сам обрывает связь при не получении АА.

политика "Abort" - не есть правильный подход.
(К слову про Abort'ы ;>, TCP можно сделать без состояний FIN_WAIT, FIN_WAIT2, CLOSE_WAIT, CLOSING, LAST_ACK, TIME_WAIT. Использовать тупо RST (connection abort) для разрыва соединения всегда, state машина упростится до безоразия и TCP будет прекрасно работать! Но это моветон!)

Ну и самое главное, - из диаграммки сигналов Slave-Transmitter'а видно, что ACK'и в шину Slave не посылает! ACK'и должен слать мастер . А раз ACK шлет мастер, то как Вы себе представляли "перекрыть" ACK=0, NACKом - высокоомным состоянием? Сбросив AA на слейве Вы только нарушите работу его машины состояний, что может привести к печальным последствиям, т.к. мастер-то об этом не знает.

Цитата
Может при таком подходе GAP не обязателен ?
Уш очень не хочется загрузить шину зря.

Разница в 1 байт. Не уж-то так принципиально?

Подход при котором GAP не обязателен Вам уже описали выше - кинуть проводок на свободный GPIO пин и сигналить когда данные будут готовы к отгузке.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 11 2009, 22:53
Сообщение #34


дятел
*****

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



Цитата(zltigo @ Jan 11 2009, 02:53) *
Так, до Вас начало доходить. Продолжим - нет он не честный.

Если бы Вы сразу же высказались в том ключе что i2c на AVR не поддерживает полностью
спецификацию из-за защитных диодов то было бы сразу все понятно, это я и так знал,
но Вы завели разговор про "'эмуляцию" OD, чем совсем сбили с толку...

З.Ы. я так понимаю что I2C1 на LPC2103 это практически то же самое что и на AVR,
ну а I2C0 не будет держать шину и при отключенном питании.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 12 2009, 07:59
Сообщение #35


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Цитата(defunct @ Jan 12 2009, 01:23) *
из диаграммки сигналов Slave-Transmitter'а видно, что ACK'и в шину Slave не посылает!


Всё таки Мастер ждёт АА когда посылает адрес в шину и если ответа нет, то прекращает связь.
А Ведомый должен подтвердить, что он тут выдав АА на шину.
Вот, если Ведомый нашёлся, то Мастер уже переходит в режим приёма и тупо качает данные...
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 12 2009, 11:13
Сообщение #36


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Папа Карло @ Jan 12 2009, 09:59) *
Всё таки Мастер ждёт АА когда посылает адрес в шину и если ответа нет, то прекращает связь.

Хотите чтобы Slave пропадал с шины?!
Как вы тогда будете различать есть ли Slave на шине вообще, правильный ли задан адрес, или у слейва просто нет данных?

Вообще мне все равно, устройство ваше, как сделаете так и будет.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 12 2009, 17:08
Сообщение #37


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Всё таки сделал по вашему т.к., если МК перевести в режим Мастера, то он не сможет принять команды !

Ещё вопрос.

Я в прерывании I2C вызываю функцию для передачи статуса в UART.
Функция простейшая и ожидает пока освободится от передачи UART и записывает следующий символ в него.
Так если я вставляю функцию в обработчик, то передаётся с ошибками информация.

Из-за чего это может быть ?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 12 2009, 18:07
Сообщение #38


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Папа Карло @ Jan 12 2009, 19:08) *
Из-за чего это может быть ?
Вероятно нельзя столько долго находиться в прерывании.
Организуйте очередь/кольцевой буфер для УАРТа - пишите в него без утомительных ожиданий.

В main-loop'е вычитывайте данные из этого буфера и отправляйте в UART.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 5th July 2025 - 20:38
Рейтинг@Mail.ru


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