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

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

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


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


適用場(chǎng)景:各種傳感器、小IC、小MCU等??刂浦噶詈托?shù)據(jù)量的傳輸


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


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


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


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


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


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


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


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


I2C使用范例


單獨(dú)輸出傳輸


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


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


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


為什么要加中斷?


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


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


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


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


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


如何一對(duì)多?


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


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


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


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


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


I2C協(xié)議簡(jiǎn)單介紹


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


I2C時(shí)序圖


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


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


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


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


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


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


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


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