您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!
串口協(xié)議基礎(chǔ)
串口由收發(fā)器組成。發(fā)送器是通過(guò)TxD引腳發(fā)送串行數(shù)據(jù),接收器是通過(guò)RxD引腳接收串行數(shù)據(jù)。發(fā)送器和接收器都利用了一個(gè)移位寄存器,這個(gè)移位寄存器可以將數(shù)據(jù)進(jìn)行“并轉(zhuǎn)串”和“串轉(zhuǎn)并”。雖然一個(gè)UART接口通常都包含了發(fā)送器和接收器,而實(shí)際上一個(gè)全雙工串口UART控制器需要獨(dú)立的發(fā)送和接收通道。這是因?yàn)槊總(gè)控制通道只控制了一個(gè)pin(一個(gè)通道要么配置成發(fā)送器,要么配置成接收器,不能同時(shí)配置成接收器和發(fā)送器)。沒(méi)有嚴(yán)格規(guī)定哪個(gè)通道可以是發(fā)送器、哪個(gè)通道可以使接收器。
UART協(xié)議(串口協(xié)議)允許選擇一個(gè)校驗(yàn)位來(lái)檢測(cè)簡(jiǎn)單的通信錯(cuò)誤(transmission errors)。校驗(yàn)位可以通過(guò)兩種不同的方式進(jìn)行產(chǎn)生和檢測(cè)(generated and checked):奇校驗(yàn)和偶校驗(yàn)(odd and even parity)。UART協(xié)議功能支持所有的校驗(yàn)方式。
串口協(xié)議對(duì)每個(gè)字節(jié)數(shù)據(jù)的bit數(shù)并不是固定不變的。盡管8-bit的字節(jié)是經(jīng)常用到的,但是一些應(yīng)用也用到7-bit、9-bit、或者更多bit的字節(jié)數(shù)據(jù)。串口功能可以使用每個(gè)字節(jié)長(zhǎng)達(dá)1~23bit長(zhǎng)度的字節(jié)數(shù)據(jù)。另外,串口協(xié)議還需要1個(gè)開(kāi)始位(1 start bit)(發(fā)送一個(gè)從“高到低”動(dòng)作,低電平需要保持1 bit的時(shí)間)和1個(gè)停止位(1 stop bit)(發(fā)送一個(gè)從“底到高”動(dòng)作,高電平需要保持1 bit的時(shí)間)來(lái)封裝數(shù)據(jù)。
串口功能是雙緩沖的。不論是發(fā)送器還是接收器,它們都包含有一個(gè)移位寄存器和一個(gè)數(shù)據(jù)寄存器。Host CPU可以在數(shù)據(jù)正在發(fā)送時(shí),將新數(shù)據(jù)寫(xiě)入到發(fā)送器的數(shù)據(jù)寄存器;也可以在數(shù)據(jù)被接收時(shí),從接收器的數(shù)據(jù)寄存器讀取數(shù)據(jù)。
串口發(fā)送器通過(guò)對(duì)通道的“中斷標(biāo)志位”和數(shù)據(jù)發(fā)送器“需求標(biāo)志位”置位來(lái)指示數(shù)據(jù)已經(jīng)從“發(fā)送數(shù)據(jù)寄存器”傳送到“發(fā)送移位寄存器”了。發(fā)送器的CIS標(biāo)志位和DTRS被置位時(shí),標(biāo)志著發(fā)送數(shù)據(jù)寄存器已經(jīng)準(zhǔn)備就緒可以接收新數(shù)據(jù)了。假如中斷標(biāo)志位將被用于輪詢環(huán)境(polling environment),CIS標(biāo)志位就必須在新數(shù)據(jù)被寫(xiě)入發(fā)送器前被清零。同樣的,如果一個(gè)DMA通道被用于UART通道服務(wù),那么DTRS標(biāo)志位就應(yīng)被DMA通道描述符清零(should be cleared by theDMA channel descriptor)。當(dāng)數(shù)據(jù)別寫(xiě)入到數(shù)據(jù)發(fā)送寄存器時(shí),這24-bit的數(shù)據(jù)發(fā)送寄存器MSB必須寫(xiě)為0。這個(gè)是iTPU串口的一個(gè)握手信號(hào),這個(gè)握手信號(hào)表明了新的發(fā)送數(shù)據(jù)進(jìn)行串行移位輸出已經(jīng)寫(xiě)好。
同樣的,串口接收器通過(guò)對(duì)CIS和DTRS標(biāo)志位進(jìn)行置位,來(lái)表明新數(shù)據(jù)已經(jīng)到了。當(dāng)數(shù)據(jù)從接收移位寄存器傳送到接收數(shù)據(jù)寄存器后,CIS和DTRS標(biāo)志位就被置位了。假如中斷標(biāo)志位將被用于輪詢環(huán)境(polling environment),接收器的CIS標(biāo)志位就必須在新數(shù)據(jù)被讀取后被清零。如果一個(gè)DMA通道被用于UART通道服務(wù),那么DTRS標(biāo)志位就應(yīng)被DMA通道描述符清零(should be cleared by theDMA channel descriptor)。為了避免數(shù)據(jù)丟失或者重復(fù)讀取同樣的數(shù)據(jù),所以必須在接收后續(xù)的數(shù)據(jù)前完成 檢測(cè)新接收到的數(shù)據(jù)、讀取數(shù)據(jù)、和清除接收CIS標(biāo)志位和DRTS標(biāo)志位。同樣的,在隨后數(shù)據(jù)接收前,與每個(gè)已接收到的數(shù)據(jù)位相關(guān)的“錯(cuò)誤條件”(error condition)必須被檢測(cè)或者保存好,否則errorcondition將會(huì)丟失。
串口功能可以進(jìn)行連續(xù)的傳輸(back-to-back transfer)。如果數(shù)據(jù)及時(shí),發(fā)送器不會(huì)產(chǎn)生空閑信號(hào)(idle line signal),而是在一個(gè)stop位后,緊跟著下一幀數(shù)據(jù)的star位?臻e信號(hào)只有在傳送數(shù)據(jù)已經(jīng)被串行移位輸出,發(fā)送數(shù)據(jù)寄存器為空時(shí)才會(huì)產(chǎn)生。發(fā)送器的空閑信號(hào)時(shí)間都是1 bit時(shí)間的整數(shù)倍。接收器可以處理任何長(zhǎng)度的空閑信號(hào)。
每個(gè)數(shù)據(jù)都是由1個(gè)start位開(kāi)始的,開(kāi)始位始終是邏輯0。跟隨在開(kāi)始位后面的是特定長(zhǎng)度的數(shù)據(jù),數(shù)據(jù)是LSB模式發(fā)送的;如果校驗(yàn)位被使能,那么1個(gè)校驗(yàn)位也將產(chǎn)生,并被發(fā)送。數(shù)據(jù)的最后一位由1個(gè)stop位標(biāo)志,結(jié)束位始終是邏輯1。一個(gè)空閑line就是由連續(xù)多個(gè)的stop位組成的,這也就意味著空閑信號(hào)其實(shí)就是信號(hào)線一直保持在邏輯1。
例子:一個(gè)ASCII字符“A”(8-bit,hex碼為0x41)一直都是以如下的方式進(jìn)行傳送的。注意:數(shù)據(jù)是LSB first發(fā)送方式。
如圖2更多詳細(xì)內(nèi)容:(注意:時(shí)序圖顯示0x41數(shù)據(jù)串行輸出時(shí)序,LSB first。)
文中用到的“bittime”位時(shí)間,指的是傳送或接受1bit數(shù)據(jù)所需要的時(shí)間。位時(shí)間是由波特率決定的,如下公式:
Bittime = 1/Baud Rate
接收器通過(guò)感知start位的下降沿,來(lái)檢測(cè)數(shù)據(jù)。因?yàn)閁ART功能總是把服務(wù)請(qǐng)求初始化后的第一個(gè)下降沿作為有效的起始條件,此時(shí)若line是空閑的,就必須使能接收器。接收位只采樣一次,大約半個(gè)bit time。在每次start bit時(shí),接收器都將出現(xiàn)同步。
如圖2展示了TX和RX數(shù)據(jù),以及串行數(shù)據(jù)的時(shí)序。任何寫(xiě)入到tx數(shù)據(jù)寄存器的數(shù)據(jù),必須將msb位置為0(其實(shí)就是開(kāi)始位,startbit)。這表明UART的新數(shù)據(jù)已經(jīng)準(zhǔn)備好,可以進(jìn)行移位輸出了。所有接收的數(shù)據(jù)通過(guò)API接收函數(shù)fs_etpu_uart_read _receive _data()進(jìn)行右對(duì)齊。傳送的數(shù)據(jù)總是由1開(kāi)始位(1 bittime low)和1停止位(1 bit time high)封裝。數(shù)據(jù)總是LSB FIRST移位輸出。當(dāng)所有數(shù)據(jù)被傳送出去后,根據(jù)校驗(yàn)位是否被使能,校驗(yàn)位也將被選擇性的輸出。數(shù)據(jù)寬度被限制在23bits以內(nèi)。這就意味著最大的數(shù)據(jù)大小、加上校驗(yàn)位,以及開(kāi)始位、結(jié)束位,一幀數(shù)據(jù)最長(zhǎng)將達(dá)到26bits。接收到的數(shù)據(jù)MSB總是0。
掃碼關(guān)注我們
傳真:0755-82591176
郵箱:vicky@yingtexin.net
地址:深圳市龍華區(qū)民治街道民治大道973萬(wàn)眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08