專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
許多單片機(jī)開發(fā)工程師經(jīng)常使用各種通訊協(xié)議,而且設(shè)備之間的成功通信是嵌入式系統(tǒng)正常運(yùn)行的關(guān)鍵。嵌入式系統(tǒng)依賴并使用通訊協(xié)議,通訊協(xié)議是一組用于管理設(shè)備之間發(fā)送和接收的數(shù)據(jù)的傳輸、同步和錯(cuò)誤檢查的規(guī)則來起作用的。
由于該協(xié)議是可工作的嵌入式系統(tǒng)的重要組成部分,因此正確運(yùn)行至關(guān)重要。由于通信錯(cuò)誤不可避免,因此許多協(xié)議(包括USB,CAN和A2B)都包含錯(cuò)誤檢查機(jī)制,例如循環(huán)冗余校驗(yàn)或CRC。
CRC用于標(biāo)記損壞的數(shù)據(jù)并防止其通過總線發(fā)送。當(dāng)今的協(xié)議通常支持更高的帶寬和速度,因此CRC對于保持嵌入式系統(tǒng)中數(shù)據(jù)的簡潔和可靠至關(guān)重要。
一、通信協(xié)議中的CRC
通信協(xié)議通常在數(shù)據(jù)包中使用兩種CRC:一種用于保護(hù)數(shù)據(jù)包的標(biāo)頭,另一種用于保護(hù)數(shù)據(jù)包的數(shù)據(jù)部分。
盡管CRC的實(shí)現(xiàn)在協(xié)議之間有所不同,但目的仍然是相同的:為系統(tǒng)創(chuàng)建一種方法來檢測錯(cuò)誤并發(fā)起重傳或忽略數(shù)據(jù)的請求。
CRC如何生成以及如何工作?所有這些都是基于算法計(jì)算的,該算法用于檢測正在發(fā)送和接收的數(shù)據(jù)之間的不一致。本質(zhì)上,CRC是從多個(gè)數(shù)據(jù)字節(jié)計(jì)算得出的值,以形成唯一的多項(xiàng)式密鑰,該密鑰被附加到傳出消息中。在接收端執(zhí)行相同的過程。然后,接收器將消息除以與發(fā)送器使用的相同多項(xiàng)式,如果此除的結(jié)果為零,則表示傳輸成功。但是,如果結(jié)果不等于零,則表明發(fā)生了錯(cuò)誤。
二、USB協(xié)議中的CRC
所述USB協(xié)議,或通用串行總線,在傳輸過程中使用循環(huán)冗余檢查,以保護(hù)所有非PID字段中從錯(cuò)誤標(biāo)記和數(shù)據(jù)分組。在USB 2.0中,令牌和幀開始(SOF)數(shù)據(jù)包包括5位CRC(CRC5),而數(shù)據(jù)數(shù)據(jù)包包括更長的16位CRC(CRC16),以為數(shù)據(jù)有效載荷提供足夠的支持,直至1024個(gè)字節(jié)。
在USB 3.1數(shù)據(jù)包中,可以在標(biāo)頭數(shù)據(jù)包中找到CRC,該標(biāo)頭數(shù)據(jù)包由標(biāo)頭數(shù)據(jù)包框架,數(shù)據(jù)包標(biāo)頭和鏈接控制字組成。標(biāo)頭受16位CRC(CRC16)保護(hù),鏈接控制字受5位CRC(CRC5)保護(hù)。數(shù)據(jù)有效載荷數(shù)據(jù)包包括一個(gè)32位CRC(CRC32),以容納較大的數(shù)據(jù)有效載荷。此外,用于控制各種特定于鏈路的功能的鏈路命令包還包括5位CRC(CRC5)。
三、CAN協(xié)議中的CRC
的CAN協(xié)議,或控制器區(qū)域網(wǎng)絡(luò),被稱為其健壯和可靠的通信,因?yàn)樗鄠€(gè)錯(cuò)誤檢查機(jī)制,包括位錯(cuò)誤檢測,格式錯(cuò)誤檢測,填充錯(cuò)誤檢測,響應(yīng)錯(cuò)誤檢測和CRC檢錯(cuò)。CRC字段包含在數(shù)據(jù)幀和遠(yuǎn)程幀中。
CRC錯(cuò)誤檢測通過在數(shù)據(jù)幀中包含15位CRC來驗(yàn)證消息是否通過總線正確發(fā)送而起作用。就像前面討論的CRC如何工作一樣,發(fā)送節(jié)點(diǎn)計(jì)算15位CRC值,然后在CRC字段中發(fā)送該值。所有節(jié)點(diǎn)將接收此消息,相互計(jì)算CRC,然后比較這些值以確定它們是否確實(shí)相同。否則,接收節(jié)點(diǎn)將通過總線發(fā)送錯(cuò)誤幀。此外,CAN協(xié)議還包括一個(gè)1位隱性CRC分隔符,有助于防止格式錯(cuò)誤,并確保這些位在總線上正確廣播并在接收端正確接收。
四、A2B協(xié)議中的CRC
的A2B協(xié)議,或汽車音頻總線,是另一種協(xié)議,該協(xié)議使用錯(cuò)誤檢查機(jī)制,以驗(yàn)證正確的通信。其中一種措施是在特定幀內(nèi)使用CRC,以幫助檢測總線上的錯(cuò)誤。
同步控制幀(SCF)充當(dāng)節(jié)點(diǎn)的控制幀或控制頭,而同步響應(yīng)幀(SRF)充當(dāng)節(jié)點(diǎn)的響應(yīng)幀或響應(yīng)頭。整個(gè)A2B幀結(jié)構(gòu)稱為超幀,它以SCF開始,包括可選的數(shù)據(jù)時(shí)隙,以SRF結(jié)尾。這些幀都包含循環(huán)冗余碼(CRC),以幫助檢測上游和下游數(shù)據(jù)錯(cuò)誤。
對于下游數(shù)據(jù)錯(cuò)誤檢測,在SCF中使用16位CRC,它確定在接收方傳輸期間發(fā)生的任何SCF數(shù)據(jù)錯(cuò)誤。SCF包括一個(gè)指示超幀開始的前同步碼,并提供從機(jī)用于時(shí)鐘和幀同步的位模式。如果從機(jī)未檢測到幀同步,則從機(jī)將指示CRC錯(cuò)誤。
對于上游數(shù)據(jù)錯(cuò)誤檢測,在SRF中還使用16位CRC來確定在接收方傳輸期間發(fā)生的任何SRF數(shù)據(jù)錯(cuò)誤。中斷請求字段在SCF中具有一個(gè)附加的CRC,以避免錯(cuò)誤的中斷被觸發(fā)。SRF還具有一個(gè)前導(dǎo)以指示響應(yīng)幀的開始,并提供上游節(jié)點(diǎn)用于時(shí)鐘和幀同步的位模式。如果上游節(jié)點(diǎn)未檢測到幀同步,則將指示CRC錯(cuò)誤。
以上就是英銳恩單片機(jī)開發(fā)工程師分享的單片機(jī)通訊CRC算法的相關(guān)知識(shí)。英銳恩專注單片機(jī)應(yīng)用方案設(shè)計(jì)與開發(fā),提供8位單片機(jī)、16位單片機(jī)、32位單片機(jī)、運(yùn)放芯片和模擬開關(guān)。