| Микроконтролери и електроника 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 ] | |||||||||
| Заглавие: | ||||||||||
|
||||||||||
| Автор: | ¶ [ Вто Сеп 22, 2009 3:54 pm ] |
| Заглавие: | |
Би било най-добре да оставиш тези вградени функции и да си направиш собствени, така ще имаш контрол върху всичко. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|