| Автор |
Съобщение |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
 Въпрос за I2C
Намерих основните команди за I2C за CCS. i2c_start, i2c_stop, i2c_poll, само че не знам как се прави адресиране. Може ли някой да хвърли малко светлина или да даде линк към някакви материали???
|
| Вто Сеп 01, 2009 9:13 am |
|
 |
|
sv_shady
Ранг: Популярен
Регистриран на: Сря Окт 11, 2006 8:19 pm Мнения: 373 Местоположение: София/Edinburgh, UK
|
Ами разгледай готовите примери в ССS. Общо взето идеята е, че първия пакет от информация съдържа адреса на слейва. Така мастера изпраща пакет на всички, но само слейва с подходящия адрес слуша.
|
| Вто Сеп 01, 2009 9:27 am |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
Добре, а отделните слейв чипове могат ли да обменят инфо помежду си или трябва да използвам мултимастър режим???
|
| Вто Сеп 08, 2009 8:33 am |
|
 |
|
БатеВаньо
Ранг: Новодошъл
Регистриран на: Чет Яну 04, 2007 12:43 am Мнения: 178
|
I2C е мултимастерна шина, така че термините слейв и мастер са валидни само за дадена транзакция. След като мастерът изпрати STOP състояние всяко едно от устройствата на шината може да стане мастер.
Тук http://www.nxp.com/acrobat_download/use ... 0204_3.pdf може да прочетеш от оригинала (навремето Philips въведе тази шина) за хардуера и протокола на I2C.
|
| Вто Сеп 08, 2009 11:58 am |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
А да попитам още нещо. Значи, когато използвам и2ц_реад() или i2c_write(), чипа чака да получи инфо или да изпрати, и двете функции ли могат да зациклят???Т.е. ако чака да прочете данни с read() тази директива се изпълнява докато прочете нещо, а ако изполвам i2c_write, как мога да съм сигурен че другия чип е приел нещо???Понеже видях, че самата функция i2c_write() може да върне 1 или 0 за получена или не получена инфо, то при използването на примерно x=i2c_write(bla,bla), колко време ще чака докато реши че инфо не е приета. И второ ако слайв иска да изпрати инфо той трябва да изчака мастъра да пусне i2c_start(); или да му поиска инфо и тогава да праща. А самият слейв изпраща ли първи байт адрес или той по дифолт отива към мастер. И как мога да избегна това чакане мастер даподаде сигнал за инфо???
|
| Нед Сеп 20, 2009 12:30 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
1.И двете функции могат да зациклят. Пускаш си един таймер в началото на комуникацията и ако до определено време няма отговор от слейв-а, значи нещо не е наред.
2.Ако другия чип е изпълнил подаденета му команда, трябва да върне ACK or NO ACK
3.Слейв не може сам да "иска да изпрати" инфо - мастера му казва "дай инфото" и слейв го дава.
Прочети дейташита на някой I2C еепром - там е обяснено много подробно и нагледно!
|
| Нед Сеп 20, 2009 7:54 pm |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
Ами ако трансфера е винаги един и същ - пр.: мастър праща 2 байта и после иска 2 байта, какъв е шанса да даде грешкаи да зацикли. Аз ако си зареждам таймер той като се препълни ще ми вдигне флаг за интеръпт и от там аз трябва с джъмп - GOTO да скачам след или преди транфера, което не ми харесва особено.
|
| Вто Сеп 22, 2009 10:32 am |
|
 |
|
stoyanoff
Ранг: Форумен бог
Регистриран на: Чет Юни 25, 2009 1:01 pm Мнения: 2251
|
|
| Вто Сеп 22, 2009 10:39 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Би било най-добре да оставиш тези вградени функции и да си направиш собствени, така ще имаш контрол върху всичко.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Сеп 22, 2009 3:54 pm |
|
|