單片機(jī)的I2C和SPI通信的含義
I2C和SPI是兩種不同的通信協(xié)議。
當(dāng)我們聽到這個(gè)協(xié)議時(shí),它似乎是不可實(shí)現(xiàn)的。事實(shí)上,協(xié)議只是人們定義的一個(gè)標(biāo)準(zhǔn)。我們只需要按照這個(gè)標(biāo)準(zhǔn)去做。例如,如果公司說我們?cè)缟?點(diǎn)上班,我們9點(diǎn)上班,或者我們扣工資,這就是協(xié)議。最常用的I2C通信芯片是EEPROM芯片,如ATMEL AT24CXX系列,除此之外還有該芯片的其他一些功能。使用SPI通信的芯片有外部閃存芯片,以及一些用于其他功能的芯片。
I2C通信需要兩個(gè)引腳:SDA SCL。SCL是時(shí)鐘引腳,SDA是數(shù)據(jù)引腳。
SPI通信需要3引腳或4引腳:CS SCK MOSI MISO。SPI通訊芯片銷名字不一定是名字,可能有其他的名字,但意思是一樣的,比如莫西人銷手段“主機(jī)機(jī)器的輸出輸入”,SPI接口芯片可能SDI寫的,就像SPI設(shè)備作為從機(jī),所以它的SDI,這意味著“從機(jī)數(shù)據(jù)輸入插口。
SPI通信過程如下:將CS引腳下拉,然后由SCK輸出時(shí)鐘,然后在MOSI引腳上輸出數(shù)據(jù),在MISO上獲得數(shù)據(jù)。
大多數(shù)MCU有I2C端口和SPI端口,可能有幾個(gè)I2C端口和SPI端口。但是,沒有I2C端口和SPI端口的單片機(jī),也可以通過普通引腳來模擬它們的定時(shí)通信。
另外,如果你是一個(gè)初學(xué)者,一定要學(xué)會(huì)使用通用的pin模擬,以更深入地理解他們通信的本質(zhì)。
整個(gè)通信過程實(shí)際上就是對(duì)引腳電平進(jìn)行控制和檢測(cè)的過程。也就是說,第一天學(xué)習(xí)控制單片機(jī)的引腳電平和檢測(cè)單片機(jī)的引腳電平。因此,I2C通信和SPI通信并不困難。
讓我告訴你一個(gè)簡(jiǎn)單的溝通過程。例如,我們將下面的通信名稱稱為KJLWT。這個(gè)名字看起來很有趣,但實(shí)際上是中文“technology old naughty boy”的首字母縮寫。主要是讓大家明白,這個(gè)名字是用來嚇唬人的。
我們用兩條線通信,一條時(shí)鐘線和一條數(shù)據(jù)線。時(shí)鐘線實(shí)際上是用來產(chǎn)生脈沖波形的,更直接的是引腳高低信號(hào),如下圖所示:
例如,我們規(guī)定當(dāng)時(shí)鐘引腳高時(shí),讀取數(shù)據(jù)引腳的電平,并且需要8個(gè)連續(xù)的時(shí)鐘來讀取一個(gè)字節(jié)。在數(shù)據(jù)方面,如何給出數(shù)據(jù)呢?就像那樣簡(jiǎn)單,數(shù)據(jù)饋送端,當(dāng)一個(gè)低電平被檢測(cè)到,表示數(shù)據(jù)在數(shù)據(jù)引腳上被發(fā)送的位。例如,數(shù)字0x88以二進(jìn)制形式寫入為10001000。讓我們來看看傳輸這些數(shù)據(jù)的過程:從機(jī)器檢測(cè)時(shí)鐘針,檢測(cè)到一個(gè)下降沿(即從高到低水平),數(shù)據(jù)發(fā)送的bit7體現(xiàn)數(shù)據(jù)大頭針,比如bit7是1,1000年,1000年,數(shù)據(jù)銷高水平,高水平的的主機(jī)時(shí)鐘針,針測(cè)試數(shù)據(jù),記錄,從機(jī)器再次發(fā)現(xiàn)時(shí)鐘的下降沿銷后,和數(shù)據(jù)bit6反映了數(shù)據(jù)的別針,由于1000 1000 bit6是0,所以機(jī)器的數(shù)據(jù)確定,然后時(shí)鐘引腳為高電平,主機(jī)檢測(cè)數(shù)據(jù)引腳的高電平和低電平,然后記錄位6…這樣做八次,一個(gè)字節(jié)就可以從從機(jī)傳送到主機(jī)。是容易的嗎?
時(shí)鐘的速度,也就是數(shù)據(jù)傳輸?shù)乃俣龋?,如果脈沖周期是1秒,也就是1Hz,那么它需要8秒來傳輸一個(gè)字節(jié);如果脈沖周期為1毫秒,即1 kHz,則輸出一個(gè)字節(jié)只需要8毫秒。所以你知道交流的速度意味著什么,對(duì)吧?
I2C通信,SPI通信,在我剛才展示的例子之上再多一點(diǎn)協(xié)議。對(duì)于特定的協(xié)議,您可以查看任何I2C和SPI通信接口芯片,并查看序列圖。我們要做的就是利用單片機(jī)的引腳來進(jìn)行計(jì)時(shí)。