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

 
 
 
Reply to this topicStart new topic
> TWI (Он же I2C) Паузы между транзакциями, Зависает если передавать сплошняком без пауз.
Д_М
сообщение Jul 26 2017, 17:20
Сообщение #1


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

Группа: Участник
Сообщений: 113
Регистрация: 15-04-05
Пользователь №: 4 185



Приветствую!
Реализовал связь двух AVR по TWI master-slave.
Циклическая запись и чтение.
Если после завершения записи сразу же начать считывание, и наоборот, но всё зависает. Если же сделать паузы в 2мс, то работает нормально. Так и должно быть, или имеет место косяк в программе?
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jul 26 2017, 22:44
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 238
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(Д_М @ Jul 26 2017, 20:20) *
Приветствую!
Реализовал связь двух AVR по TWI master-slave.
Циклическая запись и чтение.
Если после завершения записи сразу же начать считывание, и наоборот, но всё зависает. Если же сделать паузы в 2мс, то работает нормально. Так и должно быть, или имеет место косяк в программе?


Похоже на косяк в программе.
Нужно оперировать не временной задержкой, а флагом прерывания и кодом состояния.

Сообщение отредактировал aiwa - Jul 26 2017, 22:47
Go to the top of the page
 
+Quote Post
Д_М
сообщение Oct 25 2017, 10:00
Сообщение #3


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

Группа: Участник
Сообщений: 113
Регистрация: 15-04-05
Пользователь №: 4 185



Разъясните, пожалуйста, про Repeated Start.
Правильно ли я понял, что если нужно передавать только отдельные пакеты, то транзакция должна завершаться Stop. В документации сказано, что передача Stop не вызывает прерывания.
Если же нужно постоянно передавать что-то без пауз между транзакциями, то транзакция должна завершаться не Stop, а Repeated Start, который будет сразу же началом следующей транзакции. Если же транзакция завершилась командой Stop и сразу же начать новую транзакцию командой Start, произойдёт сбой, так как команда Stop не успеет отработать. Потому у меня и не работало, пока не вставил паузы между Stop и Start.
Я прав?
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 26 2017, 15:34
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 741
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Д_М @ Oct 25 2017, 13:00) *
(1) Разъясните, пожалуйста, про Repeated Start. . . .
(2) . . . Потому у меня и не работало, пока не вставил паузы между Stop и Start.

(1) Любой пакет, передаваемый master, должен начинаться Start(S) и заканчиваться Stop(P). Между ними моежт присутствовать RS.
Сам по себе пакет никаких прерываний не вызывает, только при требуемой настройке.
Обычно RS используется при передаче сложных команд, когда в первой фазе надо передать адрес слейва+RW, и 1-2...N
байт команды (режим Write), а затем считать (Read) ответ слейва. Этот режим аналогичен тому, что вместо RS использовать отдельные
Start(S) и Stop(P).
(2) Приемопередатчик I2C / TWI нельзя "дергать" пока он не закончил работу с шиной. Если Вы, в момент передачи или приема
дергаете его следующей командой из программы, то "все пропало". Поэтому возможно, и помогла пауза.
Курите описание узла I2C, - флаги состояния-статуса, настраивайте работу в режиме прерываний.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 13th December 2017 - 05:32
Рейтинг@Mail.ru


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