Pa ako od CAN-a koristis samo fizicki nivo, razlike u odnosu na RS485 nema.
Glavna razlika izmedju RS485 i CAN drajvera (fizicki nivo layera) je u detekciji kolizije. CAN je moze detektovati, a RS485 ne. Da razjasnim, pod kolizijom se podrazumeva da dva drajvera istovremeno posalju na liniju razlicit podatak. Ako jedan posalje log. 0 a drugi log. 1, nastaje kolizija podataka.
Ovo je moguce zbog drajvera koji je izveden tako da poslata log. 0 uvek pregazi log. 1 (kao sto u I2C protokolu master ili slave slanjem logicke 0 "pregazi" logicku 1 generisanu pull-up otpornikom). To omogucava da nod koji je vec poceo sa slanjem logicke 1 detektuje da je na liniji i dalje log. 0, i prekine dalje slanje, odnosno prepusti dalju predaju onome ko je prvi zapoceo slanje logicke 0. Oblik signala svakog noda je specifican (recimo da svaki ima svoj unikatan serijski broj), i ukoliko pri istovremenom slanju tog serijskog broja (on se prvi salje) na liniji jedan nod detektuje da se predato i primljeno stanje ne slaze (neko drugi vec zapoceo komunikaciju), prepustice njemu dalji rad sve dok linija ne bude slobodna.
U praksi nije sve bas tako jer se ne moze govoriti o logickoj 0 i 1 u diferencijalnim signalima, ali takav je princip.
Ovakav princip omogucava mogucnost koja se ne srece kod ostalih komunikacionih protokola. Da bilo koji nod bez intervencije mastera (ukoliko master uopste postoji) u bilo kom trenutku moze poceti sa slanjem podataka. Da bi se ipak smanjio "upad" u vec zapocetu vezu, svi nodovi moraju odredjeno vreme "osluskivati" stanje na liniji, i tek ako je ona cista poceti sa predajom.
Ostale razlike (izlazna impedansa, maksimalna brzina i daljina) su otprilike podjednake. Mozda bi se jedan drajver pokazao bolji od drugog, ali mislim da bi se isto dobilo i sa drajverima drugih proizvodjaca. To su ipak samo finese.
Dallas 1-wire protokol sa vecim brojem nodova upravo zbog kolizije primenjuje slanje obicnog pa invertovanog bita masteru u slucaju poslate komande za iscitavanje njegovog serijskog broja. Jedino je na taj nacin moguce detektovati koliziju po prijemu drugog bita. CAN protokolom detekcija kolizije je omogucena u samom drajveru, na fizickom nivou.
I2C protokolom sa vecim brojem nodova master uvek diktira kompletnu komunikaciju pojedinacnim prozivkama nodova, tako da u njemu nema potrebe za detekcijom kolizije (dva noda ne mogu zapoceti istovremenu predaju).
RS485 protokolom komunikaciju moze ili diktirati master (kao kod I2C), ili se pak ona resava prenosom tokena (poruke kojom prethodni nod omogucava kontrolu nad linijom sledecem). Korekcija gresaka je ipak i ovde neophodna da token ne bi negde "zalutao" i tako se nepovratno izgubio. Postoje naravno i drugi nacini (u DMX512 protokolu master neprestano salje podatke svim slave redom, samo simpleksom).
To je znaci glavna razlika na fizickom nivou. Ukoliko ti je bitna detekcija kolizije, uzmi CAN, a ukoliko nije, koristi i dalje RS485. Uostalom, mozes koristiti i CAN drajvere umesto RS485 drajvera jer su (ukoliko ne koristis detekciju kolizije) kompatibilni (mozda je eventualno signal invertovan). Naravno, potrebno je obratiti paznju i na ostale finese (max broj nodova, duzina i sl.).
Mislim da je CAN drajver ipak u maloj prednosti zbog mogucnosti eksternog podesavanja (trimerom na SLOPE-CONTROL pinu) vremena prelaska sa log 0 na log 1 (i obrnuto) cime se moze smanjiti refleksija za konkretno okruzenje. Takodje i zbog bolje zastite u slucaju kvara pojedinacnih drajvera, kako se ne bi zablokirala linija.
Koliko vidim, nije ti bitan bas svaki bit, a izbegao bi korekciju gresaka. U tom slucaju moguce da bi ti simpleksni DMX512 odgovarao. Detaljnije o njemu imas u AN1076 sa www.microchip.com .
Pogledaj i prilog. U njemu su objasnjeni prakticni problemi koji se srecu pri konstrukciji mreze. Jeste da je za RS485, ali isto vazi i za CAN.
Za buduci rad, smatram da bi bilo bolje da ovladas i CAN protokolom. Ipak je on standardan, a buduci da je integrisan, omogucuje mikrokontroleru mnogo manji utrosak instrukcijskih ciklusa u odnosu na rucnu detekciju i korekciju gresaka. Buduci da si vec ovladao kompleksnijim USB protokolom, CAN ces lakse shvatiti. Pogledaj i poglavlje o razlikama izmedju pojedinih protokola sa mog sajta.