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

 
 
 
Reply to this topicStart new topic
> i2c, вопрос по i2c
kostik2
сообщение Mar 7 2007, 10:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 16-02-06
Пользователь №: 14 375



как выдается ACK на ведущем приемнике ?
(надо при приеме каждого байта выставлять бит подтверждения и затем посылать start + SLA/R ?)
при приеме каждого байта надо заново высылать start+SLA/R ?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 7 2007, 10:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Ну сбосно вот :

In the Master Receiver mode, a number of data bytes are received from a Slave Transmitter
.In order to enter a Master mode, a START condition must be transmitted.
The format of the following address packet determines whether Master Transmitter or
Master Receiver mode is to be entered. If SLA+W is transmitted, MT mode is entered, if SLA+R
is transmitted, MR mode is entered. All the status codes mentioned in this section assume that
the prescaler bits are zero or are masked to zero.

Потом попадаем в моду и далее по плану...

Собсно мнемоника такая -

S SLA R A DATA A DATA ~A P
А если словами - то
1)посылаем старт
2)сла+р - в оригинале - In order to enter MR mode,
SLA+R must be transmitted. This is done by writing SLA+R to TWDR.
3)после сидим ждём .. потом делаем действия , в зависимости от полученного кода - When SLA+R have been transmitted and an acknowledgement bit has been received, TWINT is
set again and a number of status codes in TWSR are possible. Possible status codes in Master
mode are 0x38, 0x40, or 0x48. The appropriate action to be taken for each of these status codes
is detailed in Table ....
4) после , как написано в оригинале - получаем дату... -
Received data can be read from the TWDR Register when the TWINT
5) собсно самый интересный момент - After the last byte has been received, the MR should inform the ST by sending a NACK after the
last received data byte. The transfer is ended by generating a STOP condition or a repeated
START condition.
6) а после передачи 0х10(репстарт) мы входим в режим слэйва опять - в оригинале -
After a repeated START condition (state 0x10) the 2-wire Serial Interface can access the same
Slave again, or a new Slave without transmitting a STOP condition.
ну и в окончании - Repeated START enables the Master to switch between Slaves, Master Transmitter mode and Master Receiver mode without
losing control over the bus.

Србсно вот и вся наука..
Flag is set high by hardware. This scheme is repeated until the last byte has been received.

Сообщение отредактировал Kuzmi4 - Mar 7 2007, 10:49
Go to the top of the page
 
+Quote Post
bodja74
сообщение Mar 7 2007, 16:47
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Ну а если коротко,то устанавливаеш бит TWEA регистра TWCR и мастер при каждом приеме байта выставляет АСК на шину автоматом.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 7 2007, 16:58
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(bodja74 @ Mar 7 2007, 15:47) *
Ну а если коротко,то устанавливаеш бит TWEA регистра TWCR и мастер при каждом приеме байта выставляет АСК на шину автоматом.
Причем ACK должен выставляться для всех байтов кроме последнего - иначе при некоторых условиях невозможно сформировать повторный старт или стоп, а если и возможно - они все "нечестные" и устройство может на них неадекватно отреагировать.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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