Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Въпрос за I2C
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7092
Страница 1 от 1

Автор:  stoyanoff [ Вто Сеп 01, 2009 9:13 am ]
Заглавие:  Въпрос за I2C

Намерих основните команди за I2C за CCS. i2c_start, i2c_stop, i2c_poll, само че не знам как се прави адресиране. Може ли някой да хвърли малко светлина или да даде линк към някакви материали???

Автор:  sv_shady [ Вто Сеп 01, 2009 9:27 am ]
Заглавие: 

Ами разгледай готовите примери в ССS. Общо взето идеята е, че първия пакет от информация съдържа адреса на слейва. Така мастера изпраща пакет на всички, но само слейва с подходящия адрес слуша.

Автор:  stoyanoff [ Вто Сеп 08, 2009 8:33 am ]
Заглавие: 

Добре, а отделните слейв чипове могат ли да обменят инфо помежду си или трябва да използвам мултимастър режим???

Автор:  БатеВаньо [ Вто Сеп 08, 2009 11:58 am ]
Заглавие: 

I2C е мултимастерна шина, така че термините слейв и мастер са валидни само за дадена транзакция. След като мастерът изпрати STOP състояние всяко едно от устройствата на шината може да стане мастер.
Тук http://www.nxp.com/acrobat_download/use ... 0204_3.pdf може да прочетеш от оригинала (навремето Philips въведе тази шина) за хардуера и протокола на I2C.

Автор:  stoyanoff [ Нед Сеп 20, 2009 12:30 pm ]
Заглавие: 

А да попитам още нещо. Значи, когато използвам и2ц_реад() или i2c_write(), чипа чака да получи инфо или да изпрати, и двете функции ли могат да зациклят???Т.е. ако чака да прочете данни с read() тази директива се изпълнява докато прочете нещо, а ако изполвам i2c_write, как мога да съм сигурен че другия чип е приел нещо???Понеже видях, че самата функция i2c_write() може да върне 1 или 0 за получена или не получена инфо, то при използването на примерно x=i2c_write(bla,bla), колко време ще чака докато реши че инфо не е приета. И второ ако слайв иска да изпрати инфо той трябва да изчака мастъра да пусне i2c_start(); или да му поиска инфо и тогава да праща. А самият слейв изпраща ли първи байт адрес или той по дифолт отива към мастер. И как мога да избегна това чакане мастер даподаде сигнал за инфо???

Автор:  Gogo [ Нед Сеп 20, 2009 7:54 pm ]
Заглавие: 

1.И двете функции могат да зациклят. Пускаш си един таймер в началото на комуникацията и ако до определено време няма отговор от слейв-а, значи нещо не е наред.
2.Ако другия чип е изпълнил подаденета му команда, трябва да върне ACK or NO ACK
3.Слейв не може сам да "иска да изпрати" инфо - мастера му казва "дай инфото" и слейв го дава.

Прочети дейташита на някой I2C еепром - там е обяснено много подробно и нагледно!

Автор:  stoyanoff [ Вто Сеп 22, 2009 10:32 am ]
Заглавие: 

Ами ако трансфера е винаги един и същ - пр.: мастър праща 2 байта и после иска 2 байта, какъв е шанса да даде грешкаи да зацикли. Аз ако си зареждам таймер той като се препълни ще ми вдигне флаг за интеръпт и от там аз трябва с джъмп - GOTO да скачам след или преди транфера, което не ми харесва особено.

Автор:  stoyanoff [ Вто Сеп 22, 2009 10:39 am ]
Заглавие: 

stoyanoff написа:
Ами ако трансфера е винаги един и същ - пр.: мастър праща 2 байта и после иска 2 байта, какъв е шанса да даде грешкаи да зацикли. Аз ако си зареждам таймер той като се препълни ще ми вдигне флаг за интеръпт и от там аз трябва с джъмп - GOTO да скачам след или преди транфера, което не ми харесва особено. И още нещо след извикван на интеръпт и скачане някъде в програмата и примерно повторно викане на функцията за трансфер ще се пълни стекаи в 1 момент при определен брой грешки всичко ще свърши(рестарт)

Автор:  [ Вто Сеп 22, 2009 3:54 pm ]
Заглавие: 

Би било най-добре да оставиш тези вградени функции и да си направиш собствени, така ще имаш контрол върху всичко.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/