SPI、IIC與UART區(qū)別資料_第1頁
SPI、IIC與UART區(qū)別資料_第2頁
SPI、IIC與UART區(qū)別資料_第3頁
SPI、IIC與UART區(qū)別資料_第4頁
SPI、IIC與UART區(qū)別資料_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、SPI、lie、UART 區(qū)別 第一個區(qū)別當(dāng)然是名字:SPI(Serial Peripheral In terface:串行外設(shè)接口 );I2C(INTER IC BUS)UART(Universal Asynchronous Receiver Transmitter:通用異步收發(fā)器)第二,區(qū)別在電氣信號線上:SPI總線由三條信號線組成:串行時鐘(SCLK)、串行數(shù)據(jù)輸出(SDO)、串行數(shù)據(jù)輸入(SDI)。SPI總線可以實現(xiàn)多個 SPI設(shè)備互相連接。提供 SPI串行時鐘的SPI設(shè)備為SPI主 機或主設(shè)備(Master),其他設(shè)備為SPI從機或從設(shè)備(Slave)。主從設(shè)備間可以實現(xiàn)全雙工通 信

2、,當(dāng)有多個從設(shè)備時,還可以增加一條從設(shè)備選擇線。如果用通用10 口模擬SPI總線,必須要有一個輸出口 (SDO),一個輸入口 (SDI),另一 個口則視實現(xiàn)的設(shè)備類型而定,如果要實現(xiàn)主從設(shè)備,則需輸入輸出口,若只實現(xiàn)主設(shè)備, 則需輸出口即可,若只實現(xiàn)從設(shè)備,則只需輸入口即可。I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master )接口標準,具有總 線仲裁機制,非常適合在器件之間進行近距離、非經(jīng)常性的數(shù)據(jù)通信。在它的協(xié)議體系中, 傳輸數(shù)據(jù)時都會帶上目的設(shè)備的設(shè)備地址,因此可以實現(xiàn)設(shè)備組網(wǎng)。如果用通用IO 口模擬I2C總線,并實現(xiàn)雙向傳輸,則需一個輸入輸出口 (SDA)

3、,另外還 需一個輸出口(SCL)。(注:I2C資料了解得比較少,這里的描述可能很不完備)UART總線是異步串口,因此一般比前兩種同步串口的結(jié)構(gòu)要復(fù)雜很多,一般由波特率產(chǎn)生器(產(chǎn)生的波特率等于傳輸波特率的16倍)、UART接收器、UART發(fā)送器組成,硬件上由兩根線,一根用于發(fā)送,一根用于接收。顯然,如果用通用IO 口模擬UART總線,則需一個輸入口,一個輸出口。第三,從第二點明顯可以看出,SPI和UART可以實現(xiàn)全雙工,但I2C不行;第四,看看牛人們的意見吧!wudanyu : I2C線更少,我覺得比 UART、SPI更為強大,但是技術(shù)上也更加麻煩些, 因為I2C需要有雙向IO的支持,而且使用上

4、拉電阻,我覺得抗干擾能力較弱,一般用于同 一板卡上芯片之間的通信,較少用于遠距離通信。SPI實現(xiàn)要簡單一些,UART需要固定的波特率,就是說兩位數(shù)據(jù)的間隔要相等,而SPI則無所謂,因為它是有時鐘的協(xié)議。quickmouse : I2C的速度比SPI慢一點,協(xié)議比 SPI復(fù)雜一點,但是連線也比標準的SPI要少。SPI總線SPI總線簡介同步外設(shè)接口 (SPI)是由摩托羅拉公司開發(fā)的全雙工同步串行總線,該總線大量用在與EEPROM、ADC、FRAM和顯示驅(qū)動器之類的慢速外設(shè)器件通信。SPI ( Serial Peripheral Interface )是一種串行同步通訊協(xié)議,由一個主設(shè)備和一個或多個

5、從設(shè)備組成,主 設(shè)備啟動一個與從設(shè)備的同步通訊,從而完成數(shù)據(jù)的交換。SPI接口由SDI (串行數(shù)據(jù)輸入),SDO (串行數(shù)據(jù)輸出),SCK (串行移位時鐘),CS (從使能信號)四種信號構(gòu)成,CS決定了唯一的與主設(shè)備通信的從設(shè)備,如沒有 CS信號,則只能存在一個從設(shè)備,主設(shè)備通過產(chǎn)生移位時鐘來發(fā)起通訊。通訊時,數(shù)據(jù)由SDO輸出,SDI輸入,數(shù)據(jù)在時鐘的上升或下降沿由SDO輸出,在緊接著的下降或上升沿由 SDI讀入,這樣經(jīng)過8/16次時鐘的改變,完成 8/16位數(shù)據(jù)的傳輸。SPI通信該總線通信基于主-從配置。它有以下4個信號:MOSI:主出/從入MISO:主入/從出SCK:串行時鐘SS:從屬選擇

6、芯片上從屬選擇”(slaveselect)的引腳數(shù)決定了可連到總線上的器件數(shù)量。在SPI傳輸中,數(shù)據(jù)是同步進行發(fā)送和接收的。數(shù)據(jù)傳輸?shù)臅r鐘基于來自主處理器的時鐘脈沖,摩托羅拉沒有定義任何通用 SPI的時鐘規(guī)范。然而,最常用的時鐘設(shè)置基于時鐘極性 (CPOL)和時鐘相位(CPHA) 兩個參數(shù),CPOL定義SPI串行時鐘的活動狀態(tài),而 CPHA定義相對于SO-數(shù)據(jù)位的時鐘相位。CPOL和 CPHA的設(shè)置決定了數(shù)據(jù)取樣的時鐘沿。數(shù)據(jù)方向和通信速度SPI傳輸串行數(shù)據(jù)時首先傳輸最高位 。波特率可以高達5Mbps,具體速度大小取決于 SPI硬件。例女口,Xicor公司的SPI串行器件傳輸速度能達到 5MH

7、z。SPI總線接口及時序SPI總線包括1根串行同步時鐘信號線以及 2根數(shù)據(jù)線。SPI模塊為了和外設(shè)進行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸岀串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL )對傳輸協(xié)議沒有重大的影響。 如果CPOL=O,串行同步時鐘的空閑狀態(tài)為低電平;如 果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平 。時鐘相位(CPHA )能夠配置用于選擇兩種不同的傳輸 協(xié)議之一進行數(shù)據(jù)傳輸。如果 CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)備時鐘相位和極性應(yīng)該一致

8、。SPI主模塊和與之通信的外設(shè)備時鐘相位和極性應(yīng)該一致。個人理解這句話有2層意思:其一,主設(shè)備SPI時鐘和極性的配置應(yīng)該由外設(shè)來決定;其二,二者的配置應(yīng)該保持一致,即主設(shè)備的SDO同從設(shè)備的SDO配置一致,主設(shè)備的 SDI同從設(shè)備的SDI配置一致。因為主從設(shè)備是在SCLK的控制下,同時發(fā)送和接收數(shù)據(jù),并通過 2個雙向移位寄存器來交換數(shù)據(jù)。SPI接口時序如圖3、圖4所示。圖3 CPHA=O時SPI總線數(shù)據(jù)傳輸時序圖4 CPHA=1時SPI總線數(shù)據(jù)傳輸時序SPI是一個環(huán)形總線結(jié)構(gòu),由ss (cs)、sck、sdi、sdo構(gòu)成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行數(shù)據(jù)交換

9、。假設(shè)下面的8位寄存器裝的是待發(fā)送的數(shù)據(jù)10101010,上升沿發(fā)送、下降沿接收、高位先發(fā)送。那么第一個上升沿來的時候數(shù)據(jù)將會是sdo=1 ;寄存器=0101010x。下降沿到來的時候,sdi上的電平將所存到寄存器中去,那么這時寄存器=0101010sdi,這樣在8個時鐘脈沖以后,兩個寄存器的內(nèi)容互相交換一次。這樣就完成里一個spi時序。例子:假設(shè)主機和從機初始化就緒:并且主機的sbuff=0xaa,從機的sbuff=0x55,下面將分步對spi的8個時鐘周期的數(shù)據(jù)情況演示一遍:假設(shè)上升沿發(fā)送數(shù)據(jù)這樣就完成了兩個寄存器 8位的交換,上面的上表示上升沿、下表示下降沿,sdi、sdo相對于主機而言

10、的。 其中ss引腳作為主機的時候,從機可以把它拉底被動選為從機,作為從機的是時候,可以作為片選腳用。根據(jù)以上分析,一個完整的傳送周期是16位,即兩個字節(jié),因為,首先主機要發(fā)送命令過去,然后從機根據(jù)主機的名準備數(shù)據(jù),主機在下一個8位時鐘周期才把數(shù)據(jù)讀回來SPI總線是Motorola公司推出的三線同步接口,同步串行3線方式進行通信:一條時鐘線SCK,條數(shù)據(jù)輸入線MOSI,一條數(shù)據(jù)輸出線 MISO;用于CPU與各種外圍器件進行全雙工、同步串行通訊。SPI主要特點有:可以同時發(fā)岀和接收串行數(shù)據(jù);可以當(dāng)作主機或從機工作;提供頻率可編程時鐘;發(fā)送結(jié)束中斷標志;寫沖突保護;總線競爭保護等。圖 3示出SPI總

11、線工作的四種方式,其中使用的最為廣泛的是SPI0和SPI3方式(實線表示):&'KSCK綸入Ln_rLn_丁1 m 廠J." 1PL J匸廠uT -ITJ-LTUSPIOSH3SPI2sm圖2 SPI總線四種工作方式SPI模塊為了和外設(shè)進行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸岀串行同步時鐘極性和相位可以進行配置, 時鐘極性(CPOL )對傳輸協(xié)議沒有重大的影響。如果CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位( CPHA )能夠配置用于選擇兩種不同的傳輸 協(xié)議之一進行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時鐘的第

12、一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)音時鐘相位和極性應(yīng)該一致。SPI接口時序如圖3、圖4所示。二, .SPI功能模塊的設(shè)計根據(jù)功能定義及SPI的工作原理,將整個IP Core分為8個子模塊:uC接口模塊、時鐘分頻模塊、發(fā)送數(shù)據(jù)FIFO模塊、接收數(shù)據(jù)FIFO模塊、狀態(tài)機模塊、發(fā)送數(shù)據(jù)邏輯模塊、接收數(shù)據(jù)邏輯模塊以及中斷形式模 塊。深入分析SPI的四種傳輸協(xié)議可以發(fā)現(xiàn),根據(jù)一種協(xié)議,只要對串行同步時鐘進行轉(zhuǎn)換,就能得到其余的 三種協(xié)議。為了簡化設(shè)計規(guī)定,如果要連續(xù)傳輸多個數(shù)據(jù),在兩個數(shù)據(jù)傳輸之間插入一

13、個串行時鐘的空閑 等待,這樣狀態(tài)機只需兩種狀態(tài)(空閑和工作)就能正確工作。SPI協(xié)議心得SPI接口時鐘配置心得:在主設(shè)備這邊配置SPI接口時鐘的時候一定要弄清楚從設(shè)備的時鐘要求,因為主設(shè)備這邊的時鐘極性和相 位都是以從設(shè)備為基準的。因此在時鐘極性的配置上一定要搞清楚從設(shè)備是在時鐘的上升沿還是下降沿接 收數(shù)據(jù),是在時鐘的下降沿還是上升沿輸岀數(shù)據(jù)。但要注意的是,由于主設(shè)備的SDO連接從設(shè)備的SDI,從設(shè)備的SDO連接主設(shè)備的SDI,從設(shè)備SDI接收的數(shù)據(jù)是主設(shè)備的 SDO發(fā)送過來的,主設(shè)備SDI接收 的數(shù)據(jù)是從設(shè)備SDO發(fā)送過來的,所以主設(shè)備這邊SPI時鐘極性的配置(即 SDO的配置)跟從設(shè)備的S

14、DI接收數(shù)據(jù)的極性是相反的,跟從設(shè)備SDO發(fā)送數(shù)據(jù)的極性是相同的。下面這段話是Sychip Wlan8100Module Spec上說的,充分說明了時鐘極性是如何配置的:The 81xx module will always input data bits at the rising edge of the clock, and the host will always outputdata bits on the falling edge of the clock.意思是:主設(shè)備在時鐘的下降沿發(fā)送數(shù)據(jù),從設(shè)備在時鐘的上升沿接收數(shù)據(jù)。因此主設(shè)備這邊SPI時鐘極性應(yīng)該配置為下降沿有效。又如,下面

15、這段話是摘自LCD Driver IC SSD1289 :SDI is shifted into 8- bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6data bit 0.意思是:從設(shè)備 SSD1289在時鐘的上升沿接收數(shù)據(jù),而且是按照從高位到地位的順序接收數(shù)據(jù)的。因此主設(shè)備的SPI時鐘極性同樣應(yīng)該配置為下降沿有效。時鐘極性和相位配置正確后,數(shù)據(jù)才能夠被準確的發(fā)送和接收。因此應(yīng)該對照從設(shè)備的SPI接口時序或者Spec文檔說明來正確配置主設(shè)備的時鐘。IIC關(guān)于IIC總線2

16、I2C總線工作原理2.1總線的構(gòu)成及信號類型I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián)在這條總線上,但就像電話機一樣只有撥通各自的號碼才能工作,所以每個電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號分為 地址碼和控制量 兩部分,地 址碼用來選址,即接通需要控制的電路,確定控制的種類;控制量決定該調(diào)整的類別(如對比度、亮度等)及需要調(diào)整的量。這樣

17、,各控制電路雖然掛在同一條總 線上,卻彼此獨立,互不相關(guān)。I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號,它們分別是:開始信號、結(jié)束信號和應(yīng)答信號。開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。 結(jié)束信號:SCL為低電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。應(yīng)答信號:接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖, 表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單元發(fā)出一個應(yīng)答信號,CPU 接收到應(yīng)答信號后,根據(jù)實際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,由判斷為受控單元出現(xiàn)故障。目前有很多半導(dǎo)體集成電路上都集成了I2

18、C接口。帶有I2C接口的單片機有:CYGNAL的C8051F0XX 系列,PHILIPSP87LPC7XX 系列,MICROCHIP 的 PIC16C6XX 系列等。很 多外圍器件如存儲器、監(jiān)控芯片等也提供I2C接口。I2C(Inter Integrated Circuit)總線是一種由 PHILIPS公司開發(fā)的兩線式串行總線,用于連 接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于在80年代,最初為音頻和視頻設(shè)備開發(fā),如今 主要在服務(wù)器管理中使用,其中包括單個組件狀態(tài)的通信。例如管理員可對各個組件進行查 詢,以管理系統(tǒng)的配置或掌握組件的功能狀態(tài),如電源和系統(tǒng)風(fēng)扇。 可隨時監(jiān)控內(nèi)存、硬盤、網(wǎng)絡(luò)、系統(tǒng)溫

19、度等多個參數(shù),增加了系統(tǒng)的安全性,方便了管理。1 I2C總線特點I2C總線最主要的優(yōu)點是其簡單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本??偩€的長度可高達25英尺,并且能夠以10Kbps的最大傳輸速率支持 40個組件。I2C總線的另一個優(yōu)點是, 它支持多主控(multimastering),其中任何能夠進行發(fā)送和接收的設(shè)備都可以成為主總線。 一個主控能夠控制信號的傳輸和時鐘頻率。當(dāng)然,在任何時間點上只能有一個主控。I2C總線的時鐘信號在I2C總線上傳送信息時的 時鐘同步信號是由掛接在 SCL時鐘線上的所有器件的邏輯 與

20、”完成的。SCL線上由高電平到低電平的跳變將影響到這些器件,一旦某個器件的時鐘信號變?yōu)榈碗娖?,將?SCL線上所有器件開始并保護低電平期。此時,低電平周期短的器件 的時鐘由低至高的跳變并不影響SCL線的狀態(tài),這些器件將進入高電平等待的狀態(tài)。當(dāng)所有器件的時鐘信號都變?yōu)楦唠娖綍r,低電平期結(jié)束,SCL線被釋放返回高電平,即所有的器件都同時開始它們的高電平期。其后,第一個結(jié)束高電平期的器件又將SCL線拉成低電平。這樣就在 SCL線上產(chǎn)生一個同步時鐘??梢?,時鐘低電平時間由時鐘低電平期 最長的器件決定,而時鐘高電平時間由時鐘高電平期最短的器件決定。I2C總線的傳輸協(xié)議與數(shù)據(jù)傳送起始和停止條件在數(shù)據(jù)傳送過

21、程中,必須確認數(shù)據(jù)傳送的開始和結(jié)束。在I2C總線技術(shù)規(guī)范中,開始和結(jié)束信號(也稱啟動和停止信號)的定義如圖3所示。開始信號:當(dāng)時鐘總線SCL為高電平時,數(shù)據(jù)線SDA由高電平向低電平跳變, 開始傳送數(shù) 據(jù)。結(jié)束信號:當(dāng)SCL線為高電平時,SDA線從低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。開始和結(jié)束信號都是由主器件產(chǎn)生。 在開始信號以后,總線即被認為處于忙狀態(tài), 其它器件 不能再產(chǎn)生開始信號。 主器件在結(jié)束信號以后退出主器件角色, 經(jīng)過一段時間過,總線被認 為是空閑的。sp開始信號圖3超始和停止信號圖數(shù)據(jù)格式I2C總線數(shù)據(jù)傳送采用時鐘脈沖逐位串行傳送方式, 在SCL的低電平期間,SDA線上高、 低電平能

22、變化,在高電平期間, SDA上數(shù)據(jù)必須保護穩(wěn)定,以便接收器采樣接收 ,時序如 圖4所示。數(shù)據(jù)穩(wěn)定伏盍數(shù)據(jù)妾化允許圖4數(shù)據(jù)傳送時序圖I2C總線發(fā)送器送到 SDA線上的每個字節(jié)必須為 8位長,傳送時高位在前,低位在后 < 與之對應(yīng),主器件在SCL線上產(chǎn)生8個脈沖;第9個脈沖低電平期間,發(fā)送器釋放SDA線,接收器把SDA線拉低,以給出一個接收確認位;第9個脈沖高電平期間,發(fā)送器收到這個確認位然后開始下一字節(jié)的傳送,下一個字節(jié)的第一個脈沖低電平期間接收器釋放 SDA。每個字節(jié)需要9個脈沖,每次傳送的字節(jié)數(shù)是不受限制的。I2C總線的數(shù)據(jù)傳送格式是在 I2C總線開始信號后,送出的第一字節(jié)數(shù)據(jù)是用來選

23、擇從器 件地址的,其中前 7位為地址碼,第8位為方向位(R/W)。方向位為“0表示發(fā)送,即主 器件把信息寫到所選擇的從器件中;方向位為“ 1表示主器件將從從器件讀信息。格式如下:1010 A2 A1 A0 R/W注:前四位固定為 1010。開始信號后,系統(tǒng)中的各個器件將自己的地址和主器件送到總線上的地址進行比較,如 果與主器件發(fā)送到總線上的地址一致,則該器件即被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/W)決定。發(fā)送完第一個字節(jié)后再開始發(fā)數(shù)據(jù)信號。響應(yīng)數(shù)據(jù)傳輸必須帶響應(yīng)。相關(guān)的響應(yīng)時鐘脈沖由主機產(chǎn)生,當(dāng)主器件發(fā)送完一字節(jié)的數(shù)據(jù) 后,接著發(fā)出對應(yīng)于 SCL線上的一個時鐘(ACK)認

24、可位,此時鐘內(nèi)主器件釋放SDA線,一字節(jié)傳送結(jié)束,而從器件的響應(yīng)信號將SDA線拉成低電平,使 SDA在該時鐘的高電平期間為穩(wěn)定的低電平。從器件的響應(yīng)信號結(jié)束后,SDA線返回高電平,進入下一個傳送周期。通常被尋址的接收器在接收到的每個字節(jié)后必須產(chǎn)生一個響應(yīng)。當(dāng)從機不能響應(yīng)從機地 址時,從機必須使數(shù)據(jù)線保持高電平,主機然后產(chǎn)生一個停止條件終止傳輸或者產(chǎn)生重復(fù)起始條件開始新的傳輸。如果從機接收器響應(yīng)了從機地址但是在傳輸了一段時間后不能接收更 多數(shù)據(jù)字節(jié),主機必須再一次終止傳輸。這個情況用從機在第一個字節(jié)后沒有產(chǎn)生響應(yīng)來表 示。從機使數(shù)據(jù)線保持高電平主機產(chǎn)生一個停止或重復(fù)起始條件。完整的數(shù)據(jù)傳送過程如

25、圖5所示。IIilIIIIII*IIILtIII一_JILI IIII IIII lAjSTART ADDRESS FUW ACKDATAACKDA砧ACK STOP圖5完整的數(shù)據(jù)傳送過程I2C總線還具有廣播呼叫地址用于尋址總線上所有器件的功能。若一個器件不需要廣播呼叫尋址中所提供的任何數(shù)據(jù), 則可以忽咯該地址不作響應(yīng)。 如果該器件需要廣播呼叫尋址中 按需提供的數(shù)據(jù),則應(yīng)對地址作出響應(yīng),其表現(xiàn)為一個接收器。3總線基本操作I2C規(guī)程運用主/從雙向通訊。器件發(fā)送數(shù)據(jù)到總線上,則定義為發(fā)送器,器件接收數(shù)據(jù)則定義為接收器。主器件和從器件都可以工作于接收和發(fā)送狀態(tài)。總線必須由主器件(通常為微控制器)控制

26、,主器件產(chǎn)生串行時鐘(SCL )控制總線的傳輸方向,并產(chǎn)生起始和停止條件。SDA線上的數(shù)據(jù)狀態(tài)僅在 SCL為低電平的期間才能改變,SCL為高電平的期間,SDA狀態(tài)的改變被用來表示起始和停止條件。參見圖1。圖1串行總線上的數(shù)據(jù)傳送順序3.1控制字節(jié)在起始條件之后,必須是器件的控制字節(jié),其中高四位為器件類型識別符(不同的芯片類型有不同的定義,EEPROM 般應(yīng)為1010 ),接著三位為片選,最后一位為讀寫位,當(dāng)為1時為讀操作,為0時為寫操作。如圖2所示。1L10fAT JU WWL j 11 11 L1ADOAESS圖2控制字節(jié)配置3.2寫操作寫操作分為字節(jié)寫和頁面寫兩種操作,對于頁面寫根據(jù)芯片的

27、一次裝載的字節(jié)X匚 K不同有所不同。關(guān)于頁面寫的地址、應(yīng)答和數(shù)據(jù)傳送的時序參見圖3。日誠 W-ilWiV *jHL JA10U :,r i-5" l, <*T<« Fri 口 mi;_ _ _ftE>IJK ftETlVmfU4CIM嶼圖3頁面寫3.3讀操作讀操作有三種基本操作:當(dāng)前地址讀、隨機讀和順序讀。 圖4給出的是順序讀的時序圖。應(yīng)當(dāng)注意的是:最后一個讀操作的第 9個時鐘周期不是 不關(guān)心”為了結(jié)束讀操作, 主機必須在第9個周期間發(fā)出停止條件或者在第9個時鐘周期內(nèi)保持 SDA為高電平、然后發(fā)出停止條件。圖4順序讀A EKi'i," r

28、 IHiAl EF4實例:X24C04與MCS-51單片機軟硬件的實現(xiàn) X24C04是XICOR 公司的CMOS 4096位串行EEPROM,內(nèi)部組織成 512X8位。16字節(jié)頁面寫。與 MCS-51單片機接口如圖 5 所示。由于SDA是漏極開路輸出,且可以與任何數(shù)目的漏極開路或集電極開路輸出 線或(wire-Ored )連接。上拉電阻的選擇可參考X24C04的數(shù)據(jù) 手冊。下面是通過I2C接口對X24C04進行單字節(jié)寫操作的例程。流程圖及源程序如下:圖5 X24C04與51單片機接口;名稱:BSENT;描述:寫字節(jié);功能:寫一個字節(jié);調(diào)用程序:無;輸入?yún)?shù):A;輸出參數(shù):無BSEND: MOV

29、 R2,#08H ; 1 字節(jié) 8 位SENDA: CLR P3.2;RLC A;左移一位MOV P3.3,C;寫一位SETB P3.2DJNZ R2,SENDA;寫完8個字節(jié)?CLR P3.2;應(yīng)答信號SETB P3.3SETB P3.2RET氐M饒?zhí)栁鋐t;-F.早如轟左卷-tt弊此泄ll至-!':'匸怙'苗習(xí)»Fn |圖6流程圖5結(jié)束語在I2C總線的應(yīng)用中應(yīng)注意的事項總結(jié)為以下幾點:1)嚴格按照時序圖的要求進行操作,2)若與口線上帶內(nèi)部上拉電阻的單片機接口連接,可以不外加上拉電阻。3) 程序中為配合相應(yīng)的傳輸速率,在對口線操作的指令后可用 NOP指令加一

30、定的延時。4) 為了減少意外的干擾信號將 EEPROM內(nèi)的數(shù)據(jù)改寫可用外部寫保護引腳(如果有) 或者在EEPROM內(nèi)部沒有用的空間寫入標志字,每次上電時或復(fù)位時做一次檢測,判斷 EEPROM是否被意外改寫。關(guān)于IIC總線的操作注意事項1、對IIC總線的一次操作完之后,需要等待一段時間才能進行第二次操作。否則是啟動不了總線的:)2、在時鐘線(SCL )為高電平的時候,一定不能動數(shù)據(jù)線( SDA )狀態(tài),除非是啟動或者結(jié)束總線型號容量器件/業(yè)面尋址字節(jié)可尋址位模塊24C01128B(1010 )(A2)(A1)(A0)(0 或 1)3128B24C02256B(1010 )(A2)(A1)(A0)

31、(0 或 1)3256B24C04512B(1010 )(A2)(A1)(P0)(0 或 1)22X256B24C081024B(1010)(A2)(P1)(P0)(0 或 1)14X256B24C162048B(1010)(P2)(P1)(P0)(0 或 1)08X256B解析:lie總線接口器件24C系列非易失性存儲器與 89C51接口采用軟件模擬lie。24C系 列存儲器器件地址統(tǒng)一為1010XXXX,不要問為什么,這是廠家出廠的時候規(guī)定好的了。至于24C的引腳功能和89C51的接口我就不多說了,本文的重點主要是如何應(yīng)用。上面說了,器件的地址字節(jié)的高位是1010,那么低4位呢?先說最后一

32、位吧,最后一位為0的時候表示89C51要寫數(shù)據(jù)入存儲器,1的時候表示要從存儲器讀數(shù)據(jù)。還剩下中三位A2,A1和A0。它們的高低電平取決于 24C的A2,A1,A0是接高電平還是接地。A2,A1和A0有8個組合,因此可以擴展 8個相同的器件,根據(jù) A2、A1、A0的不同,一樣的 器件也會有不同的地址。 那么是不是每一個 24C都可以擴展8個呢?不是的。注意上表,24C01 有三個可尋址位, A2,A1,A0,所以可以擴展 8個,24C02也一樣。而04則只可以擴展4個08只可以擴展2個,16就沒有擴展了,只可以掛一片24C16。為什么呢?因為訪問24C系列除了訪問器件地址外,還要訪問器件內(nèi)的字節(jié)

33、的地址。例如24C01,要對其操作,就先選選中它的地址,然后操作第一個字節(jié)或其他字節(jié),這些字節(jié)也是有地址的,分模塊,用 一個字節(jié)表示,最多可以操作256個字節(jié)。24C01和24C02不大于256個字節(jié),對其操作 就簡單得多了。但 24C04,08和16呢?他們都大于256個字節(jié),怎么辦?分模塊。注意到上表的P0,P1,P3沒有?把04分成兩個模塊,2X256B,08四個模塊,16就八個模塊。 究竟怎么模塊操作呢?拿 24C08為例,有A2 P1 P0 。A2只可以0或1 ,所以只能擴展2個24C08 , 苴丿、內(nèi)有4個256字節(jié)的模塊,要操作哪個模塊取決于P1 , P0的組合。例如,24C08

34、的地址字節(jié) 為1010000X第一個字節(jié)地址為 0,第256個地址為255,如果地址字節(jié)是 1010001X,那 么第256個字節(jié)的地址為 0,第512個字節(jié)的地址為 255。就如此。再用24C08舉例說明如何擴展,當(dāng)兩個 24C08的A2腳分別接高電平和地的時候,就可以了,這樣就擴展了,他們的器件地址分別是 1010000X和1010100X。當(dāng)要讀第一個(A2 接地)24C08的的第一個模塊的數(shù)據(jù)時候,單片機先發(fā)送地址字節(jié)10100001 ;當(dāng)要把數(shù)據(jù)寫進第二個(A2接高電平)24C08的第二個模塊的時候,應(yīng)發(fā)送10101010地址字節(jié)。=P3A4;/TO=P3A5;/T1不再說了,再說我

35、瘋了,看程序吧。這是對 復(fù)制內(nèi)容到剪貼板代碼:#i nclude & It;reg51.h&gt;/*全局符號定義*/#defi ne WRITE 0xA024C016的器件地址SLA和方向位 W */#defi ne READ0xA124C04的器件地址SLA和方向位R */#defi ne BLOCK_SIZE100字節(jié)個數(shù)*/#defi ne uchar un sig ned char#defi ne HIGH 1#defi ne LOW 0#defi ne FALSE 0#defi ne TRUE FALSEsbit SCLsbit SDA24C16操作的例子。*/*定

36、義/*定義/*定義指定象單元*/void delayi2c( void ) Jvoid l_start( void ) SCL = HIGH ; delayi2c();SDA = LOW ; delayi2c();SCL = LOW ; delayi2c();void l_stop( void ) SDA = LOW ; delayi2c();SCL = HIGH ; delayi2c();SDA = HIGH ; delayi2c();SCL = LOW ; delayi2c();/初始化void I_init( void ) SCL = LOW ;I_stop();bit l_clock(

37、 void ) bit sample ;SCL = HIGH ;delayi2c();sample = SDA ;SCL = LOW ;delayi2c();return ( sample );/發(fā)送8位數(shù)據(jù)bit I_se nd( uchar I_data ) uchar i ;/*發(fā)送8位數(shù)據(jù)*/for ( i=0 ; i&lt;8 ; i+ ) SDA = (bit)( l_data &amp; 0x80 );l_data = l_data & It ;&It; 1 ; l_clock();/*請求應(yīng)答信號ACK */SDA = HlGH ;return

38、( l_clock();/接受8位數(shù)據(jù)uchar l_receive( void ) uchar l_data = 0 ;register uchar i ;for ( i=0 ; i&lt;8 ; i+ ) l_data *= 2 ;if (l_clock() l_data+ ;return ( l_data );/應(yīng)答void l_Ack( void ) SDA = LOW; l_clock();SDA = HIGH; void wait_5ms( void ) int i ;for ( i=0 ; i&lt;1000 ; i+ )J/向24C04寫入器件地址和一個指定的字

39、節(jié)地址。bit E_address(uchar page ,uchar Address )I_start();if ( I_se nd( WRITE +page)retur n ( l_se nd( Address ); elsereturn ( FALSE );/參數(shù)的含義:從第幾個模塊(不超過 3),模塊中第幾個字節(jié)(不超過 /寫到RAM央象的第幾個字節(jié)和讀的長度bit E_read_block(uchar page, uchar addr,uchar arraypo in t,uchar Ion gth)uchar i ;/*從地址0開始讀取數(shù)據(jù)*/if ( E_address(page

40、, addr ) ) /*發(fā)送重復(fù)啟動信號*/l_start();if ( l_send( READ+page ) ) for ( i=0; i&lt;=longth ;i+ )EAROMImagearraypo in t+i =l_receive();if ( i != Ion gth ) I_Ack();else I_clock()JI_stop(); return ( TRUE );else I_stop(); return ( FALSE );elseI_stop();return ( FALSE );bit E_write_block(uchar page,uchar add

41、r,uchar arraypo in t,uchar Ion gth)uchar i ;for ( i=addr; i&l t;=addr+l on gth ; i+ ) if ( E_address(page,i) &amp;&amp;I_se nd( EAROMImagearraypoi nt+i-addr ) ) I_stop();255)wait_5ms();elsereturn ( FALSE );return ( TRUE );/testvoid mai n() EAROMImage39=Oxfe;SCON = 0x5a;TMOD = 0x20;TCON = 0x69;TH1 = 0xfd;ln it();/ I2C總線初始化P仁 0xFF;if (E_write_block(0,8,39,1)P1= 0xFE;/p10elseif (E_read_block(0,8,55,1)elseP仁P1& amp;0xFD;if(EAROMImage55=0xfe)P仁 P1 &amp;0x0FB;while(1);OC門分析我們

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論