Отговори на тема  [ 19 мнения ]  Отиди на страница 1, 2  Следваща
I2C ACK въпрос 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение I2C ACK въпрос
1.
Нещо не мога да разбера. Или по-точно намеря като информация.

Ако не получа ACK , т.е получа NOACK

SCL = H
SDA = stable H

какво трябва да направя, на едни диаграми пише , почнете предаването от начало , ама на кое ЦЯЛОТО ??? или само на последният байт за който не съм получил ACK :?

Пример веднага, то и най-логичният:

EEPROM.

възможност за PAGE WRITE -> 64 bytes

стигнал съм 30-тият , но не получавам ACK , поради _НЯКАКВА СИ ПРИЧИНА_

как трябва да постъпя ?

Да почна от начало или да предам чисто и просто последният байт , докато не получа ACK :?


----------------------

2. доп. информация, моля първо разгледайте горната част и отговорете, после вижте това , че да не ви объркам нещо :-P С това чувствително I2C :-D

Прочетох почти цялата I2C specification на/от филипс, но не намерих отговор на въпроса си или съм го пропуснал.
Единствено имам описани едни три случея свързани с non-ack бла-бла , но там се казва МОЖЕ да прекратите пращането като master изпрати STOP.

А ако не искам да пращам STOP :?


----

3/Също така намерих форумили , най-вече от спецификациите от филипс за смятане на изтеглящите резистори, но нещо не ми се виждат достатъчно ясни.

Може ли да се намери / направи таблица със стойности спрямо брой-ува и скорости :-?

В момента ползвам 2kОма за 100kHz с 24LC128, но ще има поне още едно навързано у-во.

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пет Фев 03, 2006 12:26 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Ако трябва да получиш ACK (щото понякога предаването на баит може да завършва и с NACK) .... но не го получиш, повтаряш последния изпратен БАИТ ....

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Пет Фев 03, 2006 12:51 am
Профил ICQ WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Чакай сега.

В крайна сметка трябва да има на мястото на ACK , NACK / i.e. NOACK / преди STOP, така ли ?

Визирам и стандартният случей пак EEPROM:

Там пише , че след като мастър получави байта, мастър НЕ ГЕНЕРИРА ACK , а генерира STOP. (нали освен ако не иска следващ байт)

На диаграмата обаче дават

... NOACK STOP

т.е че се генерира NOACK (т.е бит SDA=1 стабилно , по време на SCL=1 ) и след това се генерира STOP bit-а.

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пет Фев 03, 2006 1:08 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Цитат:
Там пише , че след като мастър получави байта, мастър НЕ ГЕНЕРИРА ACK , а генерира STOP. (нали освен ако не иска следващ байт)

На диаграмата обаче дават

... NOACK STOP

т.е че се генерира NOACK (т.е бит SDA=1 стабилно , по време на SCL=1 ) и след това се генерира STOP bit-а.


Да не генерира ACK значи да генерира NACK :) ... няма значение така и така ти ще го игнорираш (или устроиството ) .... но ACK присъства ... просто е в ниво 1 (тоезт NACK) ... :)

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Пет Фев 03, 2006 1:26 am
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
да ти го кажа още по-ясно:
NAK е липса на ACK. т.е. не е активен отговор, а пасивен. по някаква причина, слейва не приема това, което си му пратил и не ти отговаря отвърдително. NAK е липса на съгласие или несъгласие по премълчаване.

как трябва да се реагира на NAK няма да го намериш в I2C протокола, защото зависи в коя част на обмена не си получил ACK и най-вече зависи от конкретния слейв. трябва да четеш неговата документация.


Пет Фев 03, 2006 9:48 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Ясно.

Иначе NACK го дават много често и като инвертирано ACK , т.е. (горе пак съм го написал):

SDA=1 по време на високата част от такта.

Същото , което сте написали и Вие двамата.

Благодаря за отговорите, момчета ! :supz:

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пет Фев 03, 2006 10:23 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
Не е зле да си следиш собствения клок,слейв има право да ти го задържи в нула заради някяква времеотнемаща вътрешна операция и ти трябва да почакаш ,това също е сериозна причина да не получиш ACK и да търсиш
проблема там където няма да го намериш.


Пет Фев 03, 2006 10:56 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Да , а доколкото разбрах този момент Slave да ми смъкне SCL на low се случва , ако се случи , ЧАК след като е предаден байт.


т.е S CONTROLBYTE (ACK) BYTE (ACK) BYTE (ACK) BYTE (ACK)*

и вместо това ACK slave ми издърпва клока към low, което означава да изчакам , а след това като я пусне , чакам за ACK-то ;-)

т.е един вид преди да чакам за ACK трябва да проверя дали линията SCL не ми е low

Правилно ли съм разбрал ?

edit: да си го кажа честно , ако английският ми беше малко по-добър нямаше да се налагам да проверявам дали правилно съм разбрал написаното , но уви засега е така :roll:

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пет Фев 03, 2006 11:40 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
Първо дай накъсо клока с друг пин конфигуриран като вход.
И когато вдигаш клока във 1 проверявай дали наистина е успял да се
установи в 1 ако не чакай.

Просто го направи за теста, може и да му бързаш на устройството.
Можеш да туриш и тайм-аут при изчакването и въобще да го хванеш точно къде се дъни.
Понякога 100 кхц са възможни само в PDF-а


Пет Фев 03, 2006 11:52 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Апр 27, 2005 2:47 pm
Мнения: 349
Местоположение: Varna
Мнение 
Цитат:
Първо дай накъсо клока с друг пин конфигуриран като вход.
И когато вдигаш клока във 1 проверявай дали наистина е успял да се
установи в 1 ако не чакай.

Няма нужда да ползва друг пин. Просто когато вдига SDA или SCL прави пина вход и оставя изтеглящите резистори да установят линията в 1. Обратно когато ги сваля прави пина изход с активна '0'.


Пет Фев 03, 2006 12:29 pm
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
@Bezmozachen
Дал съм му идея за тест не е нужно да се изброяват всички начини
за реализация. (и сам ще се сети)

пс.
Ако се напъна мога и по сложно да го измисля 8)


Пет Фев 03, 2006 12:47 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Абе определено това с още един крак да отделя за тест е просто по механизъм решение, което ми харесва, но някои път човек може и да няма цял Крак :-) на разполоцение.

като цяло мисля ,че е хубаво ако някои има желание да сподели нещо да не му се пречи , т.е
безмозъчен благодаря, че го каза, като цяло съм го мислил точно така.

И с отделен крак също, но се чудех кое е по-добрият вариант, май с отделен по-простичко.

Благодаря за отговорите. :wink: :)

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пет Фев 03, 2006 2:27 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Bezmozachen написа:
Цитат:
Първо дай накъсо клока с друг пин конфигуриран като вход.
И когато вдигаш клока във 1 проверявай дали наистина е успял да се
установи в 1 ако не чакай.

Няма нужда да ползва друг пин. Просто когато вдига SDA или SCL прави пина вход и оставя изтеглящите резистори да установят линията в 1. Обратно когато ги сваля прави пина изход с активна '0'.


Както казва @Bezmozachen така трябва да се прави, защото ако си в МултиМастер I2C шина, няма друг начин, 1-цата се генерира от резисторите, те са точно за това. защото може някой друг Мастер в този момент да заеме шината с 0-ла и ако се срещнат изход с 1-ца и изход с 0-ла, ще надделее по-силния, по-слабия може и да изгори.
По същия начин се прави проверката за SCL на Мастера, ако имаш бавни Слейв I2C устройства, а пък Мастер бичи на висока скорост. След всеки байт Слейва може да сваля SCL в ниско ниво и по този начин да усмирява бързия Мастер.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пет Фев 03, 2006 2:35 pm
Профил WWW
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Пет Фев 04, 2005 3:18 pm
Мнения: 309
Местоположение: Sofia
Мнение 
Ако не се бях обадил щяхте ли така изчерпателно да помогнете на младежа?
това ми прилича на мерене...


Пет Фев 03, 2006 2:54 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
Dimiter нали важното е да вървим напред ;-)

Поне на мен ми се струва , че търсиш под вола теле.

Ако не забелязваш ваще отговори се допълват и се получи чудесен пълен цял отговор.
Поне за мен де. :roll: :oops:

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Пет Фев 03, 2006 3:11 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 19 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни