国产99在线,成人3p激情视频在线观看,欧美日韩国产一区二区三区,日韩视频在线看

飛騰2000串口驅(qū)動奇偶校驗的功能和用法


一、奇偶校驗的定義和原理

奇偶校驗是一種用于簡單檢測二進制數(shù)據(jù)是否正確的方法。在串行通信中,奇偶校驗可以用于檢測數(shù)據(jù)傳輸?shù)腻e誤。

奇偶校驗分為無校驗,奇校驗,偶校驗三種。其原理是在二進制數(shù)據(jù)的末尾添加一個額外的位,使得數(shù)據(jù)中二進制 1 的數(shù)量為奇數(shù)或偶數(shù)。這個額外的位被稱為校驗位。通過在數(shù)據(jù)的末尾添加一個校驗位,可以檢測出數(shù)據(jù)在傳輸?shù)倪^程中是否存在錯誤,從而幫助檢測數(shù)據(jù)的正確性。

使用奇校驗時,如果數(shù)據(jù)中1的個數(shù)是偶數(shù),那么校驗位設(shè)置為1,使得整個數(shù)據(jù)的1的個數(shù)變?yōu)槠鏀?shù)。如果數(shù)據(jù)中1的個數(shù)是奇數(shù),那么校驗位設(shè)置為0,同樣使得整個數(shù)據(jù)的1的個數(shù)變?yōu)槠鏀?shù)。

當數(shù)據(jù)在傳輸過程中出現(xiàn)錯誤時,例如由于噪聲引起了一個二進制位的變化,這個錯誤就會影響到校驗位,導(dǎo)致整個數(shù)據(jù)的1的個數(shù)變成偶數(shù)。在接收端,通過檢測1的個數(shù)是否正確,可以判斷數(shù)據(jù)是否正確。如果1的個數(shù)不匹配,就說明數(shù)據(jù)傳輸過程中出現(xiàn)了錯誤。

需要注意的是,奇偶校驗只能檢測到一位的錯誤,對于多位錯誤的檢測就需要使用其他更復(fù)雜的校驗方法。

二、奇偶校驗的用法

要使用奇偶校驗驗證數(shù)據(jù),需要適當?shù)挠布O(shè)備和軟件支持來實現(xiàn)可靠的串行通信和數(shù)據(jù)錯誤檢測。以下以FT2000為例給大家演示和分析。

1. FT-2000串口資源

FT-2000/4 包含 4 個 UART(Universal Asynchronous Receiver/Transmitter,通用異步接收/發(fā)送裝置)控制器。其中,三個 3 線制接口,只提供輸入、輸出和中斷線,一個 9 線制接口,提供握手相關(guān)接口。

2. 串口校驗寄存器

FT-2000/4官方文檔對串口奇偶校驗使用描述并不清晰,需要注意的是在開啟校驗功能時比較容易出錯。

FT-2000/4共有3個寄存器域控制校驗方式。分別為UARTLCR_H下的SPS、EPS和PEN。

PEN為校驗的使能位,控制校驗的開啟與關(guān)閉。

ESP為奇偶校驗類型選擇。用于選擇奇校驗和偶校驗。

SPS為校驗方式選擇。

其中PEN和EPS比較好理解,是校驗使能和奇偶選擇。但SPS的描述卻比較模糊。從描述來看和PEN差不多,是校驗開關(guān)。

3. 串口奇偶校驗錯誤配置用法

在RTOS中配置串口為奇校驗,設(shè)置寄存器為PEN=1,EPS=0,SPS=1。串口定時發(fā)送數(shù)據(jù)包。

4. 串口配置后出現(xiàn)的問題

將FT-2000/4設(shè)備與接收設(shè)備連接,接收設(shè)備串口無法調(diào)試,且能響應(yīng)其他設(shè)備發(fā)送的串口數(shù)據(jù)。

當FT-2000/4設(shè)備向?qū)Ψ桨l(fā)送數(shù)據(jù)后對方設(shè)備一直不對發(fā)送的數(shù)據(jù)做出響應(yīng)。初步判斷為接收設(shè)備未收到此設(shè)備通過串口發(fā)送的完整數(shù)據(jù)幀。

5. 問題的具體分析和定位

現(xiàn)在接收設(shè)備收到數(shù)據(jù)后沒響應(yīng),可能是發(fā)送設(shè)備的問題,也可能是接收設(shè)備的問題。那么如何進行驗證呢?先將接收設(shè)備更換為電腦,若電腦收到了正確數(shù)據(jù),則發(fā)送設(shè)備沒問題。那么可能是對端接收設(shè)備出了問題。將FT-2000/4串口連接到USB轉(zhuǎn)串口工具。讓設(shè)備定時發(fā)送數(shù)據(jù),電腦使用串口調(diào)試助手接收數(shù)據(jù)。

為了找出問題所在,可使用同樣的USB轉(zhuǎn)串口工具,在配置相同的情況下使用不同的串口調(diào)試助手。然后觀察接收的數(shù)據(jù)是否正確。


測試結(jié)果:電腦收到了正確數(shù)據(jù)。在更換USB轉(zhuǎn)串口工具后。也收到了正確的數(shù)據(jù)。根據(jù)電腦的測試結(jié)果來看,發(fā)送設(shè)備沒有任何問題。但接收設(shè)備也能對來自其他設(shè)備的數(shù)據(jù)做出響應(yīng)使用。那么這種驗證方式還是沒有找到根本問題所在。這說明USB轉(zhuǎn)串口工具并不是完全可靠的??紤]到STM32的芯片具有串口校驗錯誤中斷,那么可以再使用一個STM32的設(shè)備做一個串口數(shù)據(jù)轉(zhuǎn)發(fā)測試。


參考一個STM32的設(shè)備編寫程序做數(shù)據(jù)轉(zhuǎn)發(fā)。使用一個端口按奇校驗接收數(shù)據(jù)并啟用校驗錯誤中斷。收到正常數(shù)據(jù)后通過另一個串口發(fā)送出去,如果收到的數(shù)據(jù)觸發(fā)了校驗錯誤則將數(shù)據(jù)丟棄。STM32轉(zhuǎn)發(fā)設(shè)備的連接圖與配置如下:

此時STM32先連接一個能正常收發(fā)數(shù)據(jù)的串口設(shè)備。此設(shè)備設(shè)置奇校驗后發(fā)送的數(shù)據(jù)未觸發(fā)奇偶檢驗錯誤中斷,PC收到的數(shù)據(jù)與設(shè)備發(fā)送的數(shù)據(jù)相同。此設(shè)備設(shè)置偶校驗或無校驗發(fā)送數(shù)據(jù)時觸發(fā)奇偶檢驗錯誤中斷,PC無數(shù)據(jù)接收。此時說明stm32可正常識別奇偶校驗。

將FT-2000/4設(shè)備連接STM32后發(fā)送一幀數(shù)據(jù),PC卻只收到部分數(shù)據(jù)。說明FT-2000/4設(shè)備發(fā)送的數(shù)據(jù)存在校驗不通過的問題。

5、Linux串口驅(qū)動分析

通過以上分析已初步確認了是FT-2000/4發(fā)送設(shè)備的問題,PC又成功接收到了數(shù)據(jù)。則說明問題可能出在串口配置與使用相關(guān)區(qū)域。

官方提供了linux鏡像,我們將linux鏡像燒錄后測試。發(fā)現(xiàn)在linux中串口設(shè)置奇校驗后數(shù)據(jù)發(fā)送正常,通過STM32后PC收到了發(fā)送的數(shù)據(jù)。然后在linux中將串口相關(guān)寄存器內(nèi)容打印出來并和RTOS中打印的寄存器內(nèi)容對比,發(fā)現(xiàn)SPS寄存器的值不一樣。根據(jù)FT-2000/4官方linux內(nèi)核源碼分析驅(qū)動程序。相關(guān)驅(qū)動代碼如下[1]

drivers/tty/serial/phytium-uart.c


驅(qū)動中在啟用了CMSPAR標記后才將SPS置位。

網(wǎng)上查找CMSPAR相關(guān)信息[2],CMSPAR為顯示選擇標記或空奇偶校驗,若已設(shè)置奇校驗,則奇偶校驗位總是1。否則奇偶校驗位總是0(空奇偶校驗)。即奇偶校驗變?yōu)榱薽ark和space校驗。

從網(wǎng)上串口校驗相關(guān)資料得知校驗分為無校驗、奇校驗、偶校驗、mark校驗和space校驗。而這個SPS寄存器可能就是奇偶校驗和mark與space校驗的切換。

6、串口配置修改后驗證

將FT-2000/4設(shè)備改回RTOS程序并將SPS設(shè)置為0。

這次通過STM32轉(zhuǎn)發(fā),PC收到了完整的數(shù)據(jù)。

結(jié)論和建議

這個SPS就是這兩種校驗的切換寄存器。置0時根據(jù)EPS內(nèi)容設(shè)置奇校驗或偶校驗。置1時根據(jù)EPS內(nèi)容設(shè)置mark或space校驗。

奇偶標記(mark和space)多用于串口多機通訊中的地址與數(shù)據(jù)區(qū)分??蓽p少從機的中斷次數(shù)。

例如:發(fā)送設(shè)備地址時使用mark校驗,發(fā)送數(shù)據(jù)時使用space校驗。從機空閑時僅保留mark校驗中斷。當主機發(fā)送帶mark校驗的地址時從機觸發(fā)中斷,從機判斷是否是自己的地址。若是自己的地址則將校驗方式改為space校驗并準備接收數(shù)據(jù)。若不是自己的地址則繼續(xù)等待,后續(xù)主機發(fā)送數(shù)據(jù)時不再觸發(fā)中斷。

為什么設(shè)備通過USB串口助手連接電腦后即使校驗設(shè)置錯誤電腦也能收到正確數(shù)據(jù)?可能是部分USB串口工具在檢測到校驗錯誤后并沒有丟棄數(shù)據(jù),而是將錯誤的數(shù)據(jù)直接發(fā)給了電腦。導(dǎo)致了串口調(diào)試助手的校驗方式與實際不符時也收到了數(shù)據(jù)。


[1] 內(nèi)核源碼:https://gitee.com/phytium_embedded/phytium-linux-kernel/tree/linux-5.10

[2] 參考文章:https://zhuanlan.zhihu.com/p/617236482



028-87409729

: 9:00-18:00

17348136089 

: 7*24h