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