1. 嵌入式各接口-i2c劣纲、uart逢捺、spi

?1. I2C接口

——概述:I2C是一個(gè)兩線接口,一條數(shù)據(jù)線癞季、一條時(shí)鐘線劫瞳,采用邊沿觸發(fā)方式。使用方式為cpu<——>device

——從設(shè)備:系統(tǒng)中所有外圍器件都有一個(gè)7位的地址碼绷柒,高四位為器件類型志于,由生產(chǎn)廠家制定,低三位為器件引腳定義地址废睦,由使用者定義伺绽。主控制器通過(guò)地址碼建立多機(jī)通信的機(jī)制,終端掛載在總線上郊楣,有主端和從端之分憔恳,主端必須是帶有cpu的邏輯模塊,在同一總線上的同一時(shí)刻只能有一個(gè)主端净蚤,可以有多個(gè)從端钥组。

——速率

? ? 普通模式:100khz ?| ?? ??快速模式:400khz ? ?|?? ??高速模式:3.4Mhz

——協(xié)議

1. 空閑狀態(tài):

I2C總線的SDA和SCL兩條信號(hào)線同時(shí)處于高電平時(shí),規(guī)定為總線的空閑狀態(tài)今瀑。此時(shí)各個(gè)器件的輸出場(chǎng)效應(yīng)管處于截止?fàn)顟B(tài)程梦,即釋放總線点把,由兩條信號(hào)線各自的上拉電阻把電平拉高。

2. 起始位和停止位的定義:

起始信號(hào):當(dāng)SCL為高期間屿附,SDA由高到低的跳變郎逃,啟動(dòng)信號(hào)是一種電平跳變時(shí)序信號(hào),而不是一個(gè)電平信號(hào)挺份。

停止信號(hào):當(dāng)SCL為高期間褒翰,SDA由低到高的跳變,停止信號(hào)是一種電平跳變時(shí)序信號(hào)匀泊,而不是一個(gè)電平信號(hào)优训。

發(fā)送器每發(fā)送一個(gè)字節(jié),就在時(shí)鐘脈沖9期間釋放數(shù)據(jù)線各聘,由接收器反饋一個(gè)應(yīng)答信號(hào)揣非。應(yīng)答信號(hào)為低電平時(shí),規(guī)定為有效應(yīng)答位(ACK簡(jiǎn)稱應(yīng)答位)躲因,表示接收器已經(jīng)成功地接收了改字節(jié)早敬;應(yīng)答信號(hào)為高電平時(shí),規(guī)定為非應(yīng)答位(NACK)大脉,一般表示接收器接收該字節(jié)沒(méi)有成功搞监。對(duì)于反饋有效應(yīng)答位ACK的要求是,接收器在第9個(gè)時(shí)鐘脈沖之前的低電平期間將SDA線拉低箱靴,并且確保在該時(shí)鐘的高電平期間為穩(wěn)定的低電平腺逛。如果接收器是主控器,則在它收到最后一個(gè)字節(jié)后衡怀,發(fā)送一個(gè)NACK信號(hào),以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送安疗,并釋放SDA線抛杨,以便主控接收器發(fā)送一個(gè)停止信號(hào)P。

——數(shù)據(jù)的有效性:

I2C總線進(jìn)行數(shù)據(jù)傳送時(shí)荐类,時(shí)鐘信號(hào)為高電平期間怖现,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號(hào)為低電平期間玉罐,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化屈嗤。

寫(xiě)一個(gè)字節(jié)

void write_byte(uchar date)//寫(xiě)一個(gè)字節(jié)

{

uchar i,temp;

temp=date;

for(i=0;i<8;i++){

????????temp=temp<<1;

????????scl=0;

????????//拉低SCL,因?yàn)橹挥性跁r(shí)鐘信號(hào)為低電平期間按數(shù)據(jù)線上的高低電平狀態(tài)下才允許變化吊输,并在此時(shí)和上一個(gè)循環(huán)的scl=1一起形成一個(gè)上升沿

????????delay();

????????sda=CY;

????????delay();

? ? ? ??scl=1;//拉高SCL饶号,此時(shí)SDA上的數(shù)據(jù)穩(wěn)定

????????delay();

}

scl=0;//拉低SCL,為下次數(shù)據(jù)傳輸做好準(zhǔn)備

delay();

sda=1;//釋放SDA總線季蚂,接下來(lái)由從設(shè)備控制茫船,比如從設(shè)備接收完數(shù)據(jù)后琅束,在SCL為高時(shí),拉低SDA作為應(yīng)答信號(hào)

delay();

}

uchar read_byte()//讀一個(gè)字節(jié)

{

uchar i,k;

scl=0;

delay();

sda=1;

delay();

for(i=0;i<8;i++){

????????scl=1;//上升沿時(shí)算谈,IIC設(shè)備將數(shù)據(jù)放在sda線上涩禀,并在高電平期間數(shù)據(jù)已經(jīng)穩(wěn)定,可以接收

????????delay();

????????k=(k<<1)|sda;

????????scl=0;//拉低SCL

????????delay();

}

return k;

}

寫(xiě)一個(gè)字節(jié)的流程

void write_add(uchar address,uchar data)//任意寫(xiě)一個(gè)字節(jié)

{

????????start();//啟動(dòng)——在SCL為高電平期間然眼,SDA一個(gè)下降沿觸發(fā)艾船,開(kāi)始發(fā)送

????????write_byte(0xa0);// 發(fā)送從設(shè)備地址 0x0a,寫(xiě)操作0x00

????????respons();//等待從設(shè)備響應(yīng)

????????write_byte(address);//發(fā)出芯片內(nèi)的寄存器地址高每,示意要給此寄存器賦值

????????respons();

????????write_byte(data); ?????//寫(xiě)寄存器

????????respons();

????????stop(); ? // _停止信號(hào)丽声,SCL在高電平期間,SDA一個(gè)上升沿觸發(fā)觉义,結(jié)束發(fā)送雁社。

}

讀取一個(gè)字節(jié)

uchar read_add(uchar address)//讀取一個(gè)字節(jié)

{

????????uchar data;

????????start();//啟動(dòng)——在SCL為高電平期間,SDA一個(gè)下降沿觸發(fā)晒骇,開(kāi)始發(fā)送

????????write_byte(0xa0);//發(fā)送從設(shè)備地址霉撵,寫(xiě)操作,片選

????????respons();//等待從設(shè)備響應(yīng)

????????write_byte(address);//發(fā)送芯片內(nèi)地址洪囤,告知要讀寫(xiě)的寄存器

????????respons();

????????start();

????????write_byte(0xa1);//發(fā)送從設(shè)備地址 讀操作

????????respons();

????????data=read_byte();//獲取數(shù)據(jù)

????????stop();

????????return data;

}


I2C的讀寫(xiě)流程:

寫(xiě)寄存器的標(biāo)準(zhǔn)流程為:

1.??? Master發(fā)起START

2.??? Master發(fā)送I2C addr(7bit)和w操作0(1bit)徒坡,等待ACK

3.??? Slave發(fā)送ACK

4.??? Master發(fā)送reg addr(8bit),等待ACK

5.??? Slave發(fā)送ACK

6.??? Master發(fā)送data(8bit)瘤缩,即要寫(xiě)入寄存器中的數(shù)據(jù)喇完,等待ACK

7.??? Slave發(fā)送ACK

8.??? 第6步和第7步可以重復(fù)多次,即順序?qū)懚鄠€(gè)寄存器

9.??? Master發(fā)起STOP

讀寄存器的標(biāo)準(zhǔn)流程為:

1.??? Master發(fā)送I2C addr(7bit)和w操作1(1bit)剥啤,等待ACK

2.??? Slave發(fā)送ACK

3.??? Master發(fā)送reg addr(8bit)锦溪,等待ACK

4.??? Slave發(fā)送ACK

5.??? Master發(fā)起START

6.??? Master發(fā)送I2C addr(7bit)和r操作1(1bit),等待ACK

7.??? Slave發(fā)送ACK

8.??? Slave發(fā)送data(8bit)府怯,即寄存器里的值

9.??? Master發(fā)送ACK

10.??? 第8步和第9步可以重復(fù)多次刻诊,即順序讀多個(gè)寄存器

2. uart接口

UART ?:通用異步串口,只有三根線牺丙、發(fā)送则涯、接收、地線冲簿。由于不是靠時(shí)鐘進(jìn)行傳輸粟判,所以不是同步傳輸。本質(zhì)原理是采樣峦剔。

電平 ? ? :使用標(biāo)準(zhǔn)的TTL/CMOS電平信號(hào)档礁。為增強(qiáng)抗干擾能力,提高傳輸長(zhǎng)度羊异,常采用RS232電平(3~12 表示0)(-3~-12表示1)

傳輸速率:傳輸速率取決于串口時(shí)鐘事秀,和采樣率彤断。一般為16倍采樣。

傳輸格式:一次發(fā)送一幀易迹,由具有完整意義的宰衙,不可分割的若干位組成。開(kāi)始位睹欲、數(shù)據(jù)位供炼、校驗(yàn)位(可選)、停止位窘疮。

RS232袋哼、RS422、RS485

RS422/485采用差分傳輸?shù)姆绞秸⑸溃卜Q作平衡傳輸涛贯,使用雙絞線,最大的傳輸距離為1200米蔚出,最大的傳輸速率為10Mb/s弟翘。

通信距離:

RS232? ? :波特率9600建議在13米以內(nèi)

RS422/485: 波特率9600建議在1200米以內(nèi)。

RS-485采用平衡發(fā)送和差分接收骄酗,因此具有抑制共模干擾的能力稀余,總線收發(fā)器具備的靈敏度也比較高,能檢測(cè)低至200mv的電壓趋翻,故傳輸信號(hào)能在千米以外得到恢復(fù)睛琳。RS485采用半雙工的工作方式,任何時(shí)候只能有一點(diǎn)處于發(fā)送狀態(tài)踏烙,因此發(fā)送電路需由使能信號(hào)加以控制师骗。其在多點(diǎn)互連時(shí)非常方便,可以省掉很多信號(hào)線宙帝。

總線RS422和RS485 ?的電路原理基本相同丧凤,都是以差動(dòng)的方式發(fā)送和接收,不需要數(shù)字地線步脓。差分是傳輸近距離遠(yuǎn)的根本原因,這是和RS232的根本區(qū)別浩螺。RS422通過(guò)兩對(duì)雙絞線可以全雙工工作收發(fā)互不影響靴患,RS485只能半雙工工作,發(fā)收不能同時(shí)進(jìn)行要出。

在RS232或RS485設(shè)備聯(lián)成的設(shè)備網(wǎng)中鸳君,如果設(shè)備數(shù)量超過(guò)2臺(tái),就必須使用RS485做通訊介質(zhì)患蹂,RS485網(wǎng)的設(shè)備間要想互通信息只有通過(guò)“主(Master)”設(shè)備中轉(zhuǎn)才能實(shí)現(xiàn)或颊,這個(gè)主設(shè)備通常是PC砸紊,而這種設(shè)備網(wǎng)中只允許存在一個(gè)主設(shè)備,其余全部是從(Slave)設(shè)備囱挑。而現(xiàn)場(chǎng)總線技術(shù)是以ISO/OSI模型為基礎(chǔ)的醉顽,具有完整的軟件支持系統(tǒng),能夠解決總線控制平挑、沖突檢測(cè)游添、鏈路維護(hù)等問(wèn)題。現(xiàn)場(chǎng)總線設(shè)備自動(dòng)成網(wǎng)通熄,無(wú)主/從設(shè)備之分或允許多主存在唆涝。在同一個(gè)層次上不同廠家的產(chǎn)品可以互換,設(shè)備之間具有互操作性唇辨。

3. USART

USART是增加了時(shí)鐘線的UART廊酣。

USART編程的一些注意事項(xiàng):

uint32_t?USART_BaudRate; ? ? ? ? ? ? ? ? ? //?波特率

uint32_t?USART_WordLength; ?????????????/ /?字長(zhǎng)

uint32_t?USART_StopBits; ???????????????????//?停止位

uint32_t?USART_Parity; ? ? ? ? ? ? ? ? ? ? ? ?//?校驗(yàn)位

uint32_t?USART_Mode; ? ? ? ? ? ? ? ? ? ? ? ?// USART模式

uint32_t?OverSampling; //?過(guò)采樣設(shè)置,8倍或者16倍

uint32_t?CLKPolarity; //時(shí)鐘極性

uint32_t?CLKPhase; //時(shí)鐘相位

uint32_t?CLKLastBit; //最尾位時(shí)鐘脈沖

USART_LastBit:選擇在發(fā)送最后一個(gè)數(shù)據(jù)位的時(shí)候時(shí)鐘脈沖是否在SCLK引腳輸出赏枚,可以是不輸出脈沖(USART_LastBit_Disable)亡驰、輸出脈沖(USART_LastBit_Enable)。它設(shè)定USART_CR2寄存器的LBCL位的值嗡贺。

4. spi接口

SPI接口總結(jié) - Loadingzc的專欄 - CSDN博客

第24章 SPI—讀寫(xiě)串行FLASH—零死角玩轉(zhuǎn)STM32-F429系列 - 野火_firege - 博客園

SPI信號(hào)線:

——SPI包含四條總線隐解,分別為SS占锯、SCK檬洞、MOSI、MISO

——SS:片選噩茄,低電平有效摄凡,有多少?gòu)脑O(shè)備就有多少片選信號(hào)線续徽,沒(méi)有從設(shè)備地址。

——SCK:時(shí)鐘線亲澡,由主通信設(shè)備產(chǎn)生钦扭,不同的設(shè)備支持的時(shí)鐘頻率不一樣,時(shí)鐘決定了通信速率床绪。

——MOSI:主設(shè)備輸出客情、從設(shè)備輸入

——MISO:主設(shè)備輸出、從設(shè)備輸入

SPI模式:

根據(jù)SPI時(shí)鐘極性 CPOL和時(shí)鐘香味CPHA配置的不同癞己,分為四種工作模式膀斋。

時(shí)鐘極性:SPI空閑狀態(tài)時(shí),SCK的信號(hào)電平痹雅。SPOL=0, SCK在空閑狀態(tài)時(shí)為低電平仰担,CPOL=1時(shí)相反。

時(shí)鐘相位:數(shù)據(jù)采樣的時(shí)刻绩社,當(dāng)CPHA=0時(shí)摔蓝,MOSI或MISO數(shù)據(jù)線上的信號(hào)將會(huì)在SCK時(shí)鐘線的奇數(shù)邊沿被采樣赂苗。當(dāng)CPHA=1時(shí),在偶數(shù)邊沿采樣贮尉。

SPI特性及架構(gòu)

(1)單次傳輸可選擇為 8 或 16 位拌滋。

(2)波特率預(yù)分頻系數(shù)(最大為 fPCLK/2) 。

(3)時(shí)鐘極性(CPOL)和相位(CPHA)可編程設(shè)置 绘盟。

(4)數(shù)據(jù)順序的傳輸順序可進(jìn)行編程選擇鸠真,MSB 在前或 LSB 在前。

(5)可觸發(fā)中斷的專用發(fā)送和接收標(biāo)志龄毡。

(6)可以使用 DMA 進(jìn)行數(shù)據(jù)傳輸操作吠卷。


在SPI編程中需要注意的點(diǎn):

_設(shè)置SPI的單雙向模式——單工模式還是全雙工程序

_設(shè)置SPI的主/從端模式——最大的區(qū)別在于SPI的SCK信號(hào)線的時(shí)序,時(shí)序是由主機(jī)產(chǎn)生的

_設(shè)置SPI的數(shù)據(jù)幀長(zhǎng)度沦零,8位還是16位——需要根據(jù)從芯片的datasheet而定

_設(shè)置時(shí)鐘極性祭隔,CPOL,可選高低電平(空閑時(shí)候的時(shí)鐘狀態(tài))——空閑時(shí)的時(shí)鐘極性

_設(shè)置時(shí)鐘相位路操,可選 奇/偶數(shù)邊沿采樣——采樣時(shí)的相位

_設(shè)置NSS引腳由SPI硬件控制還是軟件控制——實(shí)際中軟件控制較多

_設(shè)置時(shí)鐘分頻因子疾渴,fpclk/分頻數(shù) = fsck

_設(shè)置MSB/LSB先行

_設(shè)置CRC校驗(yàn)的表達(dá)式


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市屯仗,隨后出現(xiàn)的幾起案子搞坝,更是在濱河造成了極大的恐慌,老刑警劉巖魁袜,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桩撮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡峰弹,警方通過(guò)查閱死者的電腦和手機(jī)店量,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鞠呈,“玉大人融师,你說(shuō)我怎么就攤上這事∫狭撸” “怎么了旱爆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)窘茁。 經(jīng)常有香客問(wèn)我疼鸟,道長(zhǎng),這世上最難降的妖魔是什么庙曙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮浩淘,結(jié)果婚禮上捌朴,老公的妹妹穿的比我還像新娘吴攒。我一直安慰自己,他們只是感情好砂蔽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布洼怔。 她就那樣靜靜地躺著,像睡著了一般左驾。 火紅的嫁衣襯著肌膚如雪镣隶。 梳的紋絲不亂的頭發(fā)上诡右,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天安岂,我揣著相機(jī)與錄音,去河邊找鬼帆吻。 笑死域那,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猜煮。 我是一名探鬼主播次员,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼王带!你這毒婦竟也來(lái)了淑蔚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤愕撰,失蹤者是張志新(化名)和其女友劉穎刹衫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體盟戏,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绪妹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柿究。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邮旷。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蝇摸,靈堂內(nèi)的尸體忽然破棺而出婶肩,到底是詐尸還是另有隱情,我是刑警寧澤貌夕,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布律歼,位于F島的核電站,受9級(jí)特大地震影響啡专,放射性物質(zhì)發(fā)生泄漏险毁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畔况。 院中可真熱鬧鲸鹦,春花似錦、人聲如沸跷跪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吵瞻。三九已至葛菇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間橡羞,已是汗流浹背眯停。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尉姨,地道東北人庵朝。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像又厉,于是被迫代替她去往敵國(guó)和親九府。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1覆致、嵌入式系統(tǒng)的定義 (1)定義:以應(yīng)用為中心侄旬,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪煌妈,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能儡羔、可靠性、成本...
    榮卓然閱讀 1,823評(píng)論 0 5
  • 什么是嵌入式 IEEE(Institute of Electrical and Electronics Engin...
    Leon_Geo閱讀 3,707評(píng)論 1 20
  • 在使用單片機(jī)的過(guò)程中璧诵,I2C 通信可以說(shuō)是最被廣泛使用和采納的協(xié)議之一汰蜘,采用 I2C 協(xié)議可以占用更少的資源,鏈接...
    noparkinghere閱讀 2,169評(píng)論 0 8
  • ???本文主要介紹嵌入式系統(tǒng)的一些基礎(chǔ)知識(shí)之宿,希望對(duì)各位有幫助族操。 嵌入式系統(tǒng)基礎(chǔ) 1、嵌入式系統(tǒng)的定義 (1)定義:...
    OpenJetson閱讀 3,309評(píng)論 0 13
  • 做單片機(jī)開(kāi)發(fā)時(shí)UART,SPI和I2C都是我們最經(jīng)常使用到的硬件接口,我收集了相關(guān)的具體材料對(duì)這三種接口進(jìn)行了詳細(xì)...
    梁睿坤閱讀 68,009評(píng)論 7 31