 單(dan)片(pian)機外設(she)模塊數據傳輸不成功的(de)原因(yin)和解(jie)決辦法(fa)
							時(shi)間:2018-07-18      來源:未(wei)知
							單(dan)片(pian)機外設(she)模塊數據傳輸不成功的(de)原因(yin)和解(jie)決辦法(fa)
							時(shi)間:2018-07-18      來源:未(wei)知 
							把我近期遇到的(de)問(wen)題分享(xiang)給(gei)大家(jia)。
1.波特率(lv)(lv):花了(le)半天時間(jian)檢查(cha)接線(xian)、模(mo)塊(kuai)、電壓、電流等(deng)等(deng),都排除了(le)原因(yin),最終(zhong)發(fa)現原來(lai)模(mo)塊(kuai)的(de)波特率(lv)(lv)是(shi)115200,一(yi)查(cha)數據手冊我了(le)個去(qu),現在(zai)模(mo)塊(kuai)的(de)波特率(lv)(lv)是(shi)9600啊。來(lai)來(lai)舉起自己的(de)雙(shuang)手面壁試(shi)過。哈哈
2.TX、RX接線:啊(a)呀這個就(jiu)更容易(yi)忽視(shi)了,不(bu)要接反(fan)、不(bu)要接反(fan)、不(bu)要接反(fan)。
當然我(wo)們還要了解(jie)一下單片機(ji)的(de)幾種數據(ju)傳(chuan)輸(shu)方式,這(zhe)樣你在遇到(dao)問(wen)題時(shi)候就能舉一反三。
SPI,UART,I2C區(qu)別
SPI:高速同步串行口(kou)。3~4線接口(kou),收發獨立(li)、可同步進行
UART:通(tong)用異(yi)步串行口。按(an)照(zhao)標準波特(te)率完成雙向通(tong)訊,速度慢
SPI:一種串行(xing)傳(chuan)輸(shu)方式,三(san)線(xian)制(zhi),網(wang)上可找到其通信協(xie)議和用法的
3根(gen)線實現(xian)數據雙(shuang)向傳(chuan)輸
串行外(wai)圍接口(kou) Serial peripheral interface
UART:通用異步收發器
UART是(shi)用于控制(zhi)計算機與(yu)串(chuan)行設備的芯片。有一點(dian)要注意的是(shi),它提供(gong)了RS-232C數據(ju)終
端設(she)(she)備(bei)(bei)接口,這樣計(ji)算機就可以和(he)調制解調器或其(qi)它使用(yong)RS-232C接口的串(chuan)行設(she)(she)備(bei)(bei)通信(xin)了
。作為接(jie)口的一(yi)部(bu)分,UART還提供以下功能:
將由(you)計(ji)(ji)算機內部(bu)傳送過來(lai)的并行數據(ju)轉換(huan)為輸(shu)出的串(chuan)(chuan)行數據(ju)流。將計(ji)(ji)算機外部(bu)來(lai)的串(chuan)(chuan)行
數(shu)據轉換為字節,供計算(suan)機內部使用(yong)并(bing)行數(shu)據的器件使用(yong)。在輸出的串行數(shu)據流中加(jia)入
奇偶校驗位,并對從外部接收(shou)的數據流進行奇偶校驗。在輸出數據流中加入啟停標(biao)記,
并從接收數據流(liu)中刪除啟停標記(ji)。處理由鍵盤或鼠(shu)標發出的(de)中斷信號(鍵盤和鼠(shu)票也(ye)是
串(chuan)行設備)。可(ke)以處理計算(suan)機與(yu)外部串(chuan)行設備的同步管(guan)理問題(ti)。有一些比較高檔的UART
還(huan)提(ti)供輸(shu)入輸(shu)出數(shu)據(ju)的緩沖區,現在(zai)比較新(xin)的UART是16550,它可以在(zai)計(ji)算機(ji)需要(yao)處理數(shu)
據前在其緩沖區內存儲16字節數據,而通常的UART是(shi)8250。現在如果您購買一個內置(zhi)的
調制解調器,此調制解調器內部通(tong)常就會有16550 UART。
I2C:能(neng)用于替代標準的(de)并(bing)行總(zong)線,能(neng)連接的(de)各種集成電路和功能(neng)模塊。I2C是多主(zhu)控總(zong)線,所以任(ren)何一(yi)個(ge)(ge)設備都能(neng)像主(zhu)控器(qi)(qi)一(yi)樣工作(zuo),并(bing)控制總(zong)線。總(zong)線上(shang)每一(yi)個(ge)(ge)設備都有一(yi)個(ge)(ge)獨一(yi)無二的(de)地址,根據設備它們自己的(de)能(neng)力,它們可以作(zuo)為發射器(qi)(qi)或接收器(qi)(qi)工作(zuo)。多路微控制器(qi)(qi)能(neng)在同一(yi)個(ge)(ge)I2C總(zong)線上(shang)共存。
UART (Universal Asynchronous Receiver/Transmitter) 通(tong)用(yong)異(yi)步收(shou)發(fa)器 I2C總(zong)線:
I2C總線最主要的(de)優點是其簡(jian)單性和有效性。
由于(yu)接(jie)(jie)口直接(jie)(jie)在組件之上,因此I2C總(zong)線占(zhan)用的(de)空間非常小,減少了電路板的(de)空間和(he)芯片管腳的(de)數量,降(jiang)低了互聯(lian)成(cheng)本。總(zong)線的(de)長度可高(gao)達25英尺,并且能(neng)(neng)(neng)夠以10Kbps的(de)最(zui)大傳輸速率(lv)(lv)支(zhi)持(chi)40個組件。I2C總(zong)線的(de)另一個優(you)點(dian)是,它支(zhi)持(chi)多主(zhu)控(kong)(multimastering), 其中任何能(neng)(neng)(neng)夠進行發送和(he)接(jie)(jie)收的(de)設備都可以成(cheng)為(wei)主(zhu)總(zong)線。一個主(zhu)控(kong)能(neng)(neng)(neng)夠控(kong)制信號的(de)傳輸和(he)時鐘(zhong)頻(pin)率(lv)(lv)。當然(ran),在任何時間點(dian)上只能(neng)(neng)(neng)有(you)一個主(zhu)控(kong)。
UART:
單端(duan),遠(yuan)距(ju)離傳輸。大多數(shu)計算(suan)機包含兩個基于RS232的(de)串(chuan)(chuan)口(kou)(kou)。串(chuan)(chuan)口(kou)(kou)同(tong)時(shi)(shi)也(ye)是儀(yi)器儀(yi)表設(she)備通(tong)用(yong)的(de)通(tong)信協議;很多GPIB兼容(rong)的(de)設(she)備也(ye)帶有RS-232口(kou)(kou)。同(tong)時(shi)(shi),串(chuan)(chuan)口(kou)(kou)通(tong)信協議也(ye)可以用(yong)于獲取(qu)遠(yuan)程(cheng)采集(ji)設(she)備的(de)數(shu)據(ju)。串(chuan)(chuan)口(kou)(kou)通(tong)信的(de)概念非常簡單,串(chuan)(chuan)口(kou)(kou)按位(bit)發(fa)送(song)和接(jie)收字節。盡管比按字節(byte)的(de)并(bing)行(xing)通(tong)信慢(man),但是串(chuan)(chuan)口(kou)(kou)可以在使用(yong)一根線發(fa)送(song)數(shu)據(ju)的(de)同(tong)時(shi)(shi)用(yong)另一根線接(jie)收數(shu)據(ju)。它很簡單并(bing)且能(neng)夠(gou)實現遠(yuan)距(ju)離通(tong)信。比如(ru)IEEE488定義并(bing)行(xing)通(tong)行(xing)狀態(tai)時(shi)(shi),規定設(she)備線總(zong)常不得(de)超(chao)過20米,并(bing)且任意兩個設(she)備間的(de)長(chang)度不得(de)超(chao)過2米;而(er)對(dui)于串(chuan)(chuan)口(kou)(kou)而(er)言(yan),長(chang)度可達1200米。
具體的適用范圍就(jiu)可多了(le),軍(jun)用,醫(yi)療...到處到能用。
第一個(ge)區(qu)別當然是名字:
SPI(Serial Peripheral Interface:串(chuan)行外設接口(kou));
I2C(INTER IC BUS:意為IC之(zhi)間總線)
UART(Universal Asynchronous Receiver Transmitter:通用異步收(shou)發器)
第二,區別在電氣信號線(xian)上:
SPI總線(xian)由三(san)條信(xin)號線(xian)組成:串(chuan)行(xing)(xing)時(shi)鐘(SCLK)、串(chuan)行(xing)(xing)數(shu)據(ju)輸出(SDO)、串(chuan)行(xing)(xing)數(shu)據(ju)輸入(SDI)。SPI總線(xian)可以實(shi)現 多個SPI設備(bei)(bei)互相連接。提供(gong)SPI串(chuan)行(xing)(xing)時(shi)鐘的SPI設備(bei)(bei)為SPI主機或主設備(bei)(bei)(Master),其他(ta)設備(bei)(bei)為SPI從(cong)機或從(cong)設備(bei)(bei)(Slave)。主從(cong)設備(bei)(bei)間可以實(shi)現全雙工(gong)通信(xin),當(dang)有多個從(cong)設備(bei)(bei)時(shi),還可以增加一條從(cong)設備(bei)(bei)選擇(ze)線(xian)。
如果用(yong)通用(yong)IO口(kou)模(mo)擬SPI總線,必須(xu)要有一個(ge)輸出(chu)(chu)口(kou)(SDO),一個(ge)輸入口(kou)(SDI),另一個(ge)口(kou)則視實(shi)現(xian)(xian)(xian)的(de)設(she)備(bei)類(lei)型而(er)定,如果要實(shi)現(xian)(xian)(xian)主從(cong)設(she)備(bei),則需輸入輸出(chu)(chu)口(kou),若(ruo)(ruo)只(zhi)(zhi)實(shi)現(xian)(xian)(xian)主設(she)備(bei),則需輸出(chu)(chu)口(kou)即可(ke),若(ruo)(ruo)只(zhi)(zhi)實(shi)現(xian)(xian)(xian)從(cong)設(she)備(bei),則只(zhi)(zhi)需輸入口(kou)即可(ke)。
I2C總線(xian)是雙向、兩線(xian)(SCL、SDA)、串行(xing)、多(duo)主控(multi-master)接口標準,具有總線(xian)仲裁機制,非常(chang)適(shi)合(he)在器件之(zhi)間(jian)進行(xing)近距離、非經常(chang)性的數據通(tong)信。在它的協議(yi)體(ti)系中,傳輸數據時都會(hui)帶上(shang)目的設備的設備地址,因此可以(yi)實現設備組網。
如果用通用IO口(kou)模(mo)擬I2C總線,并(bing)實現雙向傳輸,則需(xu)一個(ge)輸入輸出(chu)口(kou)(SDA),另(ling)外(wai)還需(xu)一個(ge)輸出(chu)口(kou)(SCL)。(注:I2C資料了(le)解(jie)得比較少,這里的(de)描述可能很不完備)
UART總線是異步串口(kou),因此一(yi)(yi)般比(bi)前兩(liang)種同步串口(kou)的結構(gou)要復雜很多,一(yi)(yi)般由(you)波特率產(chan)生器(qi)(產(chan)生的波特率等(deng)于(yu)傳輸(shu)波特率的16倍)、UART接(jie)收(shou)器(qi)、UART發(fa)送器(qi)組成,硬件上由(you)兩(liang)根(gen)線,一(yi)(yi)根(gen)用(yong)于(yu)發(fa)送,一(yi)(yi)根(gen)用(yong)于(yu)接(jie)收(shou)。
顯然,如果用(yong)通用(yong)IO口模擬UART總線,則需一個(ge)輸入口,一個(ge)輸出口。
第三,從(cong)第二點明顯可以看出,SPI和UART可以實現(xian)全雙工,但(dan)I2C不行;
第四,看(kan)看(kan)牛人們的(de)意見(jian)吧!
wudanyu:I2C線更少,我(wo)覺得(de)比(bi)UART、SPI更為(wei)強大(da),但是(shi)(shi)技術上(shang)也更加麻煩(fan)些,因為(wei)I2C需(xu)要(yao)(yao)有(you)雙向IO的(de)支持,而且使(shi)用(yong)上(shang)拉電阻,我(wo)覺得(de)抗干擾能力較弱,一(yi)般用(yong)于同一(yi)板卡上(shang)芯片之間的(de)通信,較少用(yong)于遠距離(li)通信。SPI實現(xian)要(yao)(yao)簡單一(yi)些,UART需(xu)要(yao)(yao)固定的(de)波(bo)特率,就(jiu)是(shi)(shi)說兩(liang)位數據的(de)間隔要(yao)(yao)相等,而SPI則(ze)無所謂,因為(wei)它是(shi)(shi)有(you)時鐘的(de)協議。
quickmouse:I2C的速度比SPI慢一(yi)點,協(xie)議比SPI復雜一(yi)點,但是連線也比標準的SPI要(yao)少(shao)。

