| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| I2C ACK въпрос http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=1734 |
Страница 1 от 2 |
| Автор: | the_real_maniac [ Пет Фев 03, 2006 12:26 am ] |
| Заглавие: | I2C ACK въпрос |
1. Нещо не мога да разбера. Или по-точно намеря като информация. Ако не получа ACK , т.е получа NOACK SCL = H SDA = stable H какво трябва да направя, на едни диаграми пише , почнете предаването от начало , ама на кое ЦЯЛОТО ??? или само на последният байт за който не съм получил ACK Пример веднага, то и най-логичният: EEPROM. възможност за PAGE WRITE -> 64 bytes стигнал съм 30-тият , но не получавам ACK , поради _НЯКАКВА СИ ПРИЧИНА_ как трябва да постъпя ? Да почна от начало или да предам чисто и просто последният байт , докато не получа ACK ---------------------- 2. доп. информация, моля първо разгледайте горната част и отговорете, после вижте това , че да не ви объркам нещо Прочетох почти цялата I2C specification на/от филипс, но не намерих отговор на въпроса си или съм го пропуснал. Единствено имам описани едни три случея свързани с non-ack бла-бла , но там се казва МОЖЕ да прекратите пращането като master изпрати STOP. А ако не искам да пращам STOP ---- 3/Също така намерих форумили , най-вече от спецификациите от филипс за смятане на изтеглящите резистори, но нещо не ми се виждат достатъчно ясни. Може ли да се намери / направи таблица със стойности спрямо брой-ува и скорости В момента ползвам 2kОма за 100kHz с 24LC128, но ще има поне още едно навързано у-во. |
|
| Автор: | BrainStorm [ Пет Фев 03, 2006 12:51 am ] |
| Заглавие: | |
Ако трябва да получиш ACK (щото понякога предаването на баит може да завършва и с NACK) .... но не го получиш, повтаряш последния изпратен БАИТ .... |
|
| Автор: | the_real_maniac [ Пет Фев 03, 2006 1:08 am ] |
| Заглавие: | |
Чакай сега. В крайна сметка трябва да има на мястото на ACK , NACK / i.e. NOACK / преди STOP, така ли ? Визирам и стандартният случей пак EEPROM: Там пише , че след като мастър получави байта, мастър НЕ ГЕНЕРИРА ACK , а генерира STOP. (нали освен ако не иска следващ байт) На диаграмата обаче дават ... NOACK STOP т.е че се генерира NOACK (т.е бит SDA=1 стабилно , по време на SCL=1 ) и след това се генерира STOP bit-а. |
|
| Автор: | BrainStorm [ Пет Фев 03, 2006 1:26 am ] | |||||||||
| Заглавие: | ||||||||||
Да не генерира ACK значи да генерира NACK |
||||||||||
| Автор: | ДедоБоре [ Пет Фев 03, 2006 9:48 am ] |
| Заглавие: | |
да ти го кажа още по-ясно: NAK е липса на ACK. т.е. не е активен отговор, а пасивен. по някаква причина, слейва не приема това, което си му пратил и не ти отговаря отвърдително. NAK е липса на съгласие или несъгласие по премълчаване. как трябва да се реагира на NAK няма да го намериш в I2C протокола, защото зависи в коя част на обмена не си получил ACK и най-вече зависи от конкретния слейв. трябва да четеш неговата документация. |
|
| Автор: | the_real_maniac [ Пет Фев 03, 2006 10:23 am ] |
| Заглавие: | |
Ясно. Иначе NACK го дават много често и като инвертирано ACK , т.е. (горе пак съм го написал): SDA=1 по време на високата част от такта. Същото , което сте написали и Вие двамата. Благодаря за отговорите, момчета ! |
|
| Автор: | Dimiter [ Пет Фев 03, 2006 10:56 am ] |
| Заглавие: | |
Не е зле да си следиш собствения клок,слейв има право да ти го задържи в нула заради някяква времеотнемаща вътрешна операция и ти трябва да почакаш ,това също е сериозна причина да не получиш ACK и да търсиш проблема там където няма да го намериш. |
|
| Автор: | the_real_maniac [ Пет Фев 03, 2006 11:40 am ] |
| Заглавие: | |
Да , а доколкото разбрах този момент Slave да ми смъкне SCL на low се случва , ако се случи , ЧАК след като е предаден байт. т.е S CONTROLBYTE (ACK) BYTE (ACK) BYTE (ACK) BYTE (ACK)* и вместо това ACK slave ми издърпва клока към low, което означава да изчакам , а след това като я пусне , чакам за ACK-то т.е един вид преди да чакам за ACK трябва да проверя дали линията SCL не ми е low Правилно ли съм разбрал ? edit: да си го кажа честно , ако английският ми беше малко по-добър нямаше да се налагам да проверявам дали правилно съм разбрал написаното , но уви засега е така |
|
| Автор: | Dimiter [ Пет Фев 03, 2006 11:52 am ] |
| Заглавие: | |
Първо дай накъсо клока с друг пин конфигуриран като вход. И когато вдигаш клока във 1 проверявай дали наистина е успял да се установи в 1 ако не чакай. Просто го направи за теста, може и да му бързаш на устройството. Можеш да туриш и тайм-аут при изчакването и въобще да го хванеш точно къде се дъни. Понякога 100 кхц са възможни само в PDF-а |
|
| Автор: | Bezmozachen [ Пет Фев 03, 2006 12:29 pm ] | |||||||||
| Заглавие: | ||||||||||
Няма нужда да ползва друг пин. Просто когато вдига SDA или SCL прави пина вход и оставя изтеглящите резистори да установят линията в 1. Обратно когато ги сваля прави пина изход с активна '0'. |
||||||||||
| Автор: | Dimiter [ Пет Фев 03, 2006 12:47 pm ] |
| Заглавие: | |
@Bezmozachen Дал съм му идея за тест не е нужно да се изброяват всички начини за реализация. (и сам ще се сети) пс. Ако се напъна мога и по сложно да го измисля |
|
| Автор: | the_real_maniac [ Пет Фев 03, 2006 2:27 pm ] |
| Заглавие: | |
Абе определено това с още един крак да отделя за тест е просто по механизъм решение, което ми харесва, но някои път човек може и да няма цял Крак като цяло мисля ,че е хубаво ако някои има желание да сподели нещо да не му се пречи , т.е безмозъчен благодаря, че го каза, като цяло съм го мислил точно така. И с отделен крак също, но се чудех кое е по-добрият вариант, май с отделен по-простичко. Благодаря за отговорите. |
|
| Автор: | ¶ [ Пет Фев 03, 2006 2:35 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Както казва @Bezmozachen така трябва да се прави, защото ако си в МултиМастер I2C шина, няма друг начин, 1-цата се генерира от резисторите, те са точно за това. защото може някой друг Мастер в този момент да заеме шината с 0-ла и ако се срещнат изход с 1-ца и изход с 0-ла, ще надделее по-силния, по-слабия може и да изгори. По същия начин се прави проверката за SCL на Мастера, ако имаш бавни Слейв I2C устройства, а пък Мастер бичи на висока скорост. След всеки байт Слейва може да сваля SCL в ниско ниво и по този начин да усмирява бързия Мастер. |
|||||||||||||||||||
| Автор: | Dimiter [ Пет Фев 03, 2006 2:54 pm ] |
| Заглавие: | |
Ако не се бях обадил щяхте ли така изчерпателно да помогнете на младежа? това ми прилича на мерене... |
|
| Автор: | the_real_maniac [ Пет Фев 03, 2006 3:11 pm ] |
| Заглавие: | |
Dimiter нали важното е да вървим напред Поне на мен ми се струва , че търсиш под вола теле. Ако не забелязваш ваще отговори се допълват и се получи чудесен пълен цял отговор. Поне за мен де. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|