集成电路互联总线I2C模块
I2C的基本概念
I2C:集成電路互聯總線
主要用于同一電路板內各集成電路模塊之間的連接。
I2C采用雙向2線制串行數據傳輸方式,支持所有IC制造工藝,簡化IC間的通信連接。
I2C時PHILIPS公司于20世紀80年代初提出。其后PHILIPS和其他廠商提供了種類豐富的I2C兼容芯片。
主機:在I2C總線中,提供時鐘信號,對總線時序進行控制的器件。主機負責總線上各個設備信息的傳輸控制,檢測并協調數據的發送和接收。
從機:在I2C系統中,除主機外的其他設備均為從機,主機通過從機地址訪問從機,對應的從機做出響應。與主機通信。從機之間無法通信,任何數據傳輸都必須通過主機進行。
地址:每個I2C器件都有自己的地址,以供自身在從機模式下使用,在標準的I2C中,從機地址被定義為7位。
發送器和接收器:發送數據到總線的器件被稱為發送器,從總線接收數據的器件稱為接收器。
SDA和SCL:SDA表示串行數據線,SCL表示串行時鐘線。
?
I2C之間如何建立聯系
當主機向一個從機發送數據。怎么確保哪一個從機來接收數據,怎么知道與主機通信的是之前接收數據的從機。
I2C總線上的器件具有兩個地址:受控地址和廣播地址
每一個器件有唯一的受控地址用于定點通信,而相同的通用廣播地址則用于主控方向同時對所有器件進行訪問。
I2C的總線尋址約定:
I2C總線采用了獨特的尋址約定,規定了起始信號后的第一個字節位尋址字節,用來尋址被控器件,并規定數據傳送方向,尋址字節由被控器的7位地址位(D7-D1位)和一位方向位(D0位)組成。
方向位位0時,表示主控器將數據寫入被控器,為1.時表示主控器從被控器讀取數據。
具體尋址:主控器發送起始信號后,立刻發送尋址字節,這時總線上的所有器件都將尋址字節中的7位地址與自己器件地址比較。
如果兩者相同,則該器件認為主控器尋址,并發送應答信號,被控器根據數據方向位確定自身是作為發送器還是接收器。
主機要向從機寫1個字節數據時。主機首先產生START信號,然后發送一個7.位從機地址,查詢相應的從機,緊接著的第8位時數據方向位(R/W);0表示主機發送數據,這時主機等待從機的應答信號,當主機收到應答信號時,發送給從機一個位置參數,告訴從機主機的數據在從機接收數組中存放的位置,然后繼續等待從機的響應信號,當主機收到響應信號時,發送1個字節的數據,繼續等待從機的響應信號,當主機收到響應信號時,產生停止信號,結束傳送過程。
I2C驅動構件使用方法
在I2C驅動構件頭文件中給出了用于定義所有I2C號的宏定義、I2C所用的引腳組的宏定義。
為了實現I2C之間的通信,封裝了7個基本對外接口函數:
初始化函數:主要用于I2C模塊工作的參數設置(工作時鐘、引腳復用配置、模塊使能),人口參數(I2C的模塊號、I2C的主從機選擇、本模塊的初始化地址、波特率)
從從機讀取一個字節數據函數:主要用于主機從從機接收一個字節數據,所以需要知道當前主機的模塊號,要讀取的從機的地址,要讀的數據在從機接收數組中的位置以及一個用于存儲讀取到數據的變量。
向從機寫一個字節數據函數:與上一個類似,也需要相應的四個參數。
從從機讀取n個字節數據函數:與從從機讀取一個字節數據函數的區別在于需要知道讀寫數據的個數以及獨處數據的緩沖區和寫入數據的首地址,故入口參數位五個。
向從機寫n個字節數據函數:與上一個類似,也需要相應的五個入口參數。
開I2C中斷函數和關I2C中斷函數:為了讓主機發送的數據從機能夠接收到,設置中斷函數,使得從機I2C能夠接收到主機發送到數據。
構件使用步驟
對于主機端:
在主函數main中,先調用I2C初始化函數對I2C模塊進行初始化。
i2c_init(IIC_0,1,MasterAddress,100); ? ?//第四個參數位波特率,單位位KB/S
聲明一個數組用于存儲向從機發送到數據,并賦值。
uint_8 data[12]; ? ? ? //發向從機的數據
strcpy(data,"Version3.4\n"); ? ?//為data數組賦值
在主循環中,小燈每閃爍一次,向從機發送一個字節數據。
//依次向從機寫dara中數據,0x73位從機地址,0x02為數據在從機接收數組中的位置
i2c_write(IIC_0,0x73,0x02,data[Num_flag]);
對于從機端:
在主函數main中,先調用I2C初始化函數對I2C模塊進行初始化。
i2c_init(IIC_1,1,0x73,75); ? ?//i2c1模塊初始化
需要接收從主機發送的數據,并把數據放在一個數組buf[ ]中。
i2c_enable_re_int(IIC_1); ? ?//為data數組賦值
然后可以通過串口吧數據發送到PC機
uart_send(UART_TEST,buf[visitaddr]); ? ? //發送主機傳送過來的數據
這樣就實現主機向從機發送一個字節數據。
?
嵌入式技術基礎與實踐(第4版)
總結
以上是生活随笔為你收集整理的集成电路互联总线I2C模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android与Javascript交互
- 下一篇: 枫之伴 Maple Companion