UART通信協(xié)議及SoC仿真
什么是全雙工?什么是半雙工?
全雙工:同一時(shí)刻,兩個(gè)設(shè)備都在收發(fā)數(shù)據(jù),比如SPI。注意QSPI是半雙工,因?yàn)?根線(xiàn)只能同時(shí)收或者發(fā)。
半雙工:兩設(shè)備間可以收發(fā)數(shù)據(jù),但只能收完再發(fā)或發(fā)完再收。
單工:任何時(shí)刻只能進(jìn)行一個(gè)方向的通訊,且固定一方為發(fā)送設(shè)備,一方為接收設(shè)備。
串口通信協(xié)議
空閑位:不通信時(shí),TX & RX是邏輯“1”狀態(tài),表示當(dāng)前線(xiàn)路無(wú)數(shù)據(jù)傳輸。
起始位:發(fā)送“0”,表示傳輸開(kāi)始。
數(shù)據(jù)位:起始位之后,數(shù)據(jù)位的個(gè)數(shù)可以是5、6、7、8等,一般是8bit,采用ASCII碼。從最低位開(kāi)始傳送,根據(jù)波特率在數(shù)據(jù)bit穩(wěn)定的中間位置采樣。
奇偶校驗(yàn)位:數(shù)據(jù)位加上這一位后,使得“1”的位數(shù)為偶數(shù),則為偶校驗(yàn),使得“1”的位數(shù)為奇數(shù)則為奇校驗(yàn),以次來(lái)校驗(yàn)數(shù)據(jù)傳送的正確性。
比如一個(gè) 8 位長(zhǎng)的有效數(shù)據(jù)為:10100101,此時(shí)總共有 4 個(gè)“ 1”,
為達(dá)到奇校驗(yàn)效果,校驗(yàn)位應(yīng)為“ 1”,即有效數(shù)據(jù)和校驗(yàn)位中“ 1”的個(gè)數(shù)為奇數(shù)。
為達(dá)到偶校驗(yàn)效果,校驗(yàn)位應(yīng)為“ 0”,即有效數(shù)據(jù)和校驗(yàn)位中“ 1”的個(gè)數(shù)為偶數(shù)。
注意,UART校驗(yàn)方法有:奇校驗(yàn)(odd)、偶校驗(yàn)(even)、0校驗(yàn)(space)、0校驗(yàn)(mark)、無(wú)校驗(yàn)(noparity),為了提高實(shí)際帶寬,一般可省去校驗(yàn)位,即選擇無(wú)校驗(yàn),思考下為什么?
0 校驗(yàn)是不管有效數(shù)據(jù)是什么,校驗(yàn)位固定為“ 0”。1 校驗(yàn)是校驗(yàn)位固定為“ 1”。
無(wú)校驗(yàn)就是數(shù)據(jù)包中不包含校驗(yàn)位。
停止位:一個(gè)字符數(shù)據(jù)傳輸?shù)慕Y(jié)束標(biāo)志,可以是1位、1.5位、2位的高電平。停止位不僅表示傳輸?shù)慕Y(jié)束,并且可提供校正時(shí)鐘同步。停止位的位數(shù)越多,時(shí)鐘容忍程度越大,但有效帶寬就越小。
波特率
數(shù)據(jù)傳輸速率使用波特率來(lái)表示。單位bps(bits per second),常見(jiàn)的波特率9600bps、19200bps、115200bps等,如果串口波特率設(shè)置為9600bps,那么傳輸1bit數(shù)據(jù)需要的時(shí)間是1/9600≈104.2us。
帶上校驗(yàn)位,傳送一個(gè)字符數(shù)據(jù)實(shí)際是11個(gè)比特(1bit開(kāi)始位、8bit數(shù)據(jù)位、1bit校驗(yàn)位、1bit停止位),有效的傳輸速率實(shí)際為9600*8/11= 6982bps。
不帶校驗(yàn)位,傳送一個(gè)字符數(shù)據(jù)實(shí)際是10個(gè)比特(1bit開(kāi)始位、8bit數(shù)據(jù)位、1bit停止位),有效的傳輸速率實(shí)際為9600*8/10=7680bps。
這就是為何不傳校驗(yàn)位,可以提高一點(diǎn)帶寬,也就是所謂的開(kāi)銷(xiāo)。
以小編設(shè)計(jì)的RISC-V SoC為例,仿真UART: