了解CAN功能,學習CAN功能,理解CAN和串口的區別,以及它和RS485的相似之處。
1、“多主機”特性
在CAN網絡通訊中,無需其它設備同意,每個CAN設備都可以主動向外發送數據,且所有設備都會收到數據,包括它自己。而在RS485網絡中,其它設備通常需要在主機的協調下才可以進入正常的通訊。
2、“高優先級的標識符設備”優先發送特性
假如網絡中有設備在發送“標識符數據”,“高優先級的標識符設備”會打斷發送方,進入優先發送“標識符”。如果它發現設備正在發送“非標識符數據”,它會主動讓對方發送完成。為了保證多主機特性,“高優先級的標識符設備”的發送頻率不要過高。
3、發送方知道發送的數據被正確接收
在CAN網絡通訊中,每幀數據發送完成,所有的CAN設備都會給出應答,發送方應答隱性電平,而接收方均回答顯性電平。由于顯性電平優先,發送方會接收到正確的應答。在TTL串口和RS485網絡中,發送方不知道發送是否被對方接收了,也就是說,發送了,對方是否正確收到,它不管。而在CAN中,發送方不僅知道發送,還知道發送是否被正確接收。即使接收方知道“解析標識符”不正確,它們也會給出接收正確的應答。
4、知道網絡是否繁忙
在CAN總線空閑時,總線上為隱性電平,而CAN會時刻接收網路中的這些位數據,通過空閑位,它會知道網絡是否繁忙。
5、CAN收發器和RS485收發器
通過上圖,我們發現CAN收發器和RS485收發器有點相似,但CAN收發器沒有“使能發送和使能接收”控制引腳,因此,CAN收發器在發送的同時,也可以接收自己發送的數據,以及其它設備發送來的顯性位。CAN允許發送和接收同時進行,但它接收的是自己發送的數據或是顯性數據位。TTL串口也可以收發同時進行,但是,它收到的是其它設備的數據。有人會說,把TXD和RXD連接到一起,使用單線通訊,采用軟件實現,但方法復雜。如果RS485在發送時,使能了RS485接收,這樣就和CAN有點相似了,但是,它不是知道總線是否空閑。即使知道,效率也很低下。CAN采用硬件實現,效率更高,更快。
6、CAN過濾器
CAN過濾器會對指定的標識符進行過濾,但不影響CAN的FIFO工作,即使標識符不匹配,FIFO一樣會移入新數據位。經過標識符過濾后,硬件會快速告訴CPU接收到正確的數據。
7、CAN標識符
CAN的硬件決定了一個CAN設備可能有多個設備標識符,也可能只有一個設備標識符。這個標識符,可以理解為地址,也可以理解為ID。在CAN網絡中,可能會有多個設備擁有相同的標識符。這樣,CAN通訊會更加自由,更加靈活。它不再象串口那樣,設備地址需要唯一性才可以實現正確的多機通訊。當然你也可以通過復雜的程序去實現,那樣做,實在是太復雜了。
8、CAN空閑位
CAN總線空閑的定義是連續11個位的隱性電平(邏輯為1)。而CAN的顯性電平邏輯為0,一旦有顯性就說明肯定至少有1個設備節點在發送數據,那就表明總線不是空閑了。CAN的幀間隙是連續3個以上隱性電平。具體多少個空閑位,沒有測試。這個是搜索得到的。
以上內容,通過實驗總結得到的,可能存在理解偏差。