亚洲色婷婷综合开心网,老师粉嫩小泬喷水视频90,天天躁夜夜躁狠狠综合,欧美日韩一区二区三区自拍

 
您好,歡迎訪問上海力矽微電子技術(shù)有限公司
021-31063206
力矽微電子
?Leapix Microelectronics?
【stm32】I2C和UART的區(qū)別
來源: | 作者:electronics-101 | 發(fā)布時間: 2022-03-31 | 1124 次瀏覽 | 分享到:
I2C和UART的區(qū)別

I2C,又叫IIC。標(biāo)準(zhǔn)寫法應(yīng)當(dāng)是I2C,讀作“I方C”。


兩根線、雙向傳輸數(shù)據(jù)、一對多傳輸數(shù)據(jù)、速度不快、通用性很強(qiáng)。


適用場景:各種傳感器、小IC、小MCU等。控制指令和小數(shù)據(jù)量的傳輸


說到兩根線的數(shù)據(jù)傳輸方式,大家可能會對串口(UART)最熟悉,TX、RX兩根線即可傳輸數(shù)據(jù),常用的跑到115200bps的速度毫無問題。


那么為什么還需要I2C這樣的同樣是兩根線的傳輸方式呢?


I2C能夠1對多,UART只能1對1。因此I2C又叫I2C總線。


I2C接口能夠用軟件模擬來擴(kuò)充接口,UART則不行。


I2C接口帶有同步時鐘,對時鐘穩(wěn)定性要求遠(yuǎn)沒有UART那么高。


由此可見,I2C存在的最大原因在于簡單且靈活性高。


例如一個主控要接5個外設(shè),但是通常的主控都不可能有5個UART口。如果用UART就需要硬件擴(kuò)展。


但是用I2C的話,只需要1組I2C接口即可。即使沒有硬件I2C接口,也可以有軟件模擬I2C的源代碼可以調(diào)用。(I2C源碼網(wǎng)上隨便就可以搜到很多)。嵌入式開發(fā)初學(xué)者都可以在一周之內(nèi)自己獨(dú)立寫一套出來。


I2C使用范例


單獨(dú)輸出傳輸


這個沒什么好講的,硬件連好了,軟件配置好了,數(shù)據(jù)就可以順利傳輸了。


這種連接方式,僅限于CPU需要控制外設(shè),而外設(shè)永遠(yuǎn)不會自己主動發(fā)數(shù)據(jù)給CPU的情況。如果外設(shè)需要主動要求發(fā)數(shù)據(jù)個CPU,需要采用下面一種方式。


帶中斷的數(shù)據(jù)傳輸


為什么要加中斷?


I2C只能由CPU(主機(jī))去找外設(shè)(從機(jī))索取數(shù)據(jù),外設(shè)不能主動發(fā)送數(shù)據(jù)給CPU。


但是CPU不能定期去問外設(shè)“你有沒有數(shù)據(jù)要發(fā)給我?”,這樣耗CPU的計算資源,也耗電,且無法進(jìn)入睡眠狀態(tài)。


因此需要外設(shè)有辦法通知CPU,“我有數(shù)據(jù)要發(fā)了”。I2C配合的中斷信號就是這個作用。外設(shè)有數(shù)據(jù)要發(fā)了,先發(fā)個中斷給CPU,CPU再來通過I2C讀取外設(shè)想要發(fā)過來的數(shù)據(jù)。


對于低功耗應(yīng)用的場景、能夠觸發(fā)的外設(shè)場景,都需要這么來設(shè)計。例如電容觸摸屏,平時CPU是休眠的,點(diǎn)擊一下就喚醒系統(tǒng)。再例如G-Sensor運(yùn)動傳感器,一旦被晃動了就喚醒CPU。


一個控制多個設(shè)備:


如何一對多?


一根I2C總線上掛載多個設(shè)備,那么豈不是CPU發(fā)個什么數(shù)據(jù),所有的外設(shè)都可以看得到?


是的,就這樣子的。只不過CPU先會發(fā)一個地址,所有的外設(shè)都會收到這個地址。這個地址就好比外設(shè)的名字。叫了你了,你就答應(yīng),沒叫你就別答應(yīng)。


地址總共能有127個,不同的I2C接口的外設(shè)的地址通常是不會重復(fù)的。


對于如果我需要在一根I2C總線上掛載多個相同的外設(shè)呢?例如上面的一組I2C控制幾個燈控IC。這種情況下,IC廠家通常都會未卜先知,知道大家可能會一口氣用好幾個,在IC上預(yù)留地址腳,通過不同的拉高和拉低的狀態(tài),把設(shè)備的I2C的地址配置成不同的值。


通過地址選擇腳,選擇不同的I2C地址


I2C協(xié)議簡單介紹


講了,這么多,硬件工程師們知道什么是I2C以及怎么使用了,但是還是不能愉快的和軟件工程師交流,因為還不知道傳輸?shù)脑斍椤?/span>


I2C時序圖


具體的I2C工作時序,記住這么幾條就可以理解了:


只能由主機(jī)(Master)發(fā)起數(shù)據(jù)傳輸請求,從機(jī)(Slave)只能被動響應(yīng)。


通常MCU是主機(jī),外圍設(shè)備是從機(jī)。


主機(jī)和從機(jī)都不說話的時候,兩根線都是高電平。(被外部上拉電阻拉高的)


主機(jī)先發(fā)送地址(Address),I2C上掛載的所有的設(shè)備都會收到這個地址,只有這個地址和自己的地址一致,才會響應(yīng)(ACK)。


主機(jī)發(fā)送地址的時候順帶還會說本次操作是讀還是寫(RW)。從機(jī)收到這個讀寫信號,如果是讀,從機(jī)就準(zhǔn)備好要被讀取的數(shù)據(jù)等著主機(jī)來讀,如果是寫,從機(jī)就做好接收數(shù)據(jù)的準(zhǔn)備。


從機(jī)響應(yīng)了,主機(jī)才會繼續(xù)發(fā)數(shù)據(jù)。如果沒有人響應(yīng),要么是從設(shè)備都掛了,要么是地址不對,總之就是有問題。


如果上面的都o(jì)k了,接下來就是按部就班的傳輸數(shù)據(jù)了。