實戰經驗吐血推薦:怎樣在Linux環境下輕鬆實現基於I2C總線的EEPROM...

2020-11-29 電子產品世界

  1引言

本文引用地址:http://www.eepw.com.cn/article/279351.htm

  I2C (Inter-Integrated Circuit1總線是一種由Philips公司開發的2線式串行總線,用於連接微控制器及其外圍設備。它是同步通信的一種特殊形式,具有接口線少、控制方式簡單、器件封裝形式小、通信速率較高等優點。在主從通信中,可有多個I2C總線器件同時接到I2C總線上,通過地址來識別通信對象。筆者在開發基於MPC8250的嵌入式Linux系統的過程中發現I2C總線在嵌入式系統中應用廣泛,I2C總線控制器的類型比較多,對系統提供的操作接口差別也很大。與I2C總線相連的從設備主要有微控制器、EEPROM、實時時鐘、A/D轉換器等。MPC8250處理器正是通過內部的I2C總線控制器來和這些連接在I2C總線上的設備進行數據交換的。由於I2C總線的特性,Linux的I2C總線設備驅動程序的設計者在設計驅動程序時採用了獨特的體系結構。使開發I2C總線設備驅動程序與開發一般設備驅動程序的方法具有很大差別。因此,開發I2C總線設備驅動程序除了要涉及一般Linux內核驅動程序的知識外。還要對I2C總線驅動的體系結構有深入的了解。筆者在開發過程中使用設備型號為AT24C01A的EEPROM來測試I2C總線驅動。

  2工作原理概述

  在介紹I2C總線結構之前。要搞清楚兩個概念:I2C總線控制器和I2C設備。I2C總線控制器為微控制器或微處理器提供控制I2C總線的接口,它控制所有I2C總線的特殊序列、協議、仲裁、時序,這裡指MPC8250提供的I2C總線控制接口。I2C設備是指通過I2C總線與微控制器或微處理器相連的設備,如EEPROM、LCD驅動器等,這裡指EEPROM.

  在一個串行數據通道中。I2C總線控制器可以配置成主模式或從模式。開發過程中,MPC8250的I2C總線控制器工作在主模式,作為主設備;與總線相連的I2C設備為AT24C01A型EEPROM,作為從設備。主設備和從設備都可以工作於接收和發送狀態。總線必須由主設備控制,主設備產生串行時鐘控制總線的傳輸方向,並產生起始和停止條件。

  2.1 I2C總線控制器

  I2C使用由串行數據線SDA和串線時鐘線SCL組成的兩線結構來在外部集成電路與控制器之間交換數據。MPC8250的I2C總線控制器包括發送和接收單元、一個獨立的波特率發生器和一個控制單元。發送和接收單元使用相同的時鐘信號,如果I2C為主設備。那麼時鐘信號由I2C的波特率發生器產生;如果I2C為從設備,時鐘信號則由外部提供。

  SDA和SCL為雙向的,通過外部+3.3 V上拉電阻連接至正向電壓。當總線處於空閒狀態時,SDA和SCL都應是高電平,I2C通常的配置模式如圖1所示。

  

 

  圖1 I2C配置模式

  I2C的接收和發送單元均為雙緩存,在數據發送時,數據從發送數據寄存器到移位寄存器,以時鐘速率輸出到SDA線;在數據接收時,數據從SDA線進入移位寄存器,然後進入接收寄存器。

  2.2 I2C總線控制器和EEPROM的基本操作

  I2C總線在傳送數據過程中共有3種類型的信號,分別是:開始信號、結束信號和應答信號。

  開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數據;

  結束信號:SCL為高電平時,SDA由低電平向高電平跳變,傳送數據結束;

  應答信號:接收數據的設備在接收到一個字節數據後,向發送數據的設備發出特定的低電平脈衝。表示已收到數據。

  當MPC8250的I2C總線空閒時,其SDA和SCL均為高電平,主設備通過發送一個開始信號啟動發送過程。這個信號的時序要求是當SCL為高時,SDA出現一個由高到低的電平跳變。在起始條件之後。必須是從設備的地址字節,其中高4位為器件類型識別符(不同的晶片類型有不同的定義,EEPROM一般應為1010),接著3位為片選,最後1位為讀寫位,當為1時為讀操作,為0時為寫操作,如圖2所示。

  

 

  圖2 EEPROM設備地址字節結構

  如果主設備要向EEPROM中寫數據,在地址字節中主設備向EEPROM發出一個寫請求(R/W=0),發送的地址字節之後緊跟著要發送的數據。每發送一個字節的數據後EEPROM就會產生一個應答信號,主設備也會監控應答信號,如果在發送一個字節後EEPROM沒有返回應答信號,則主設備就會停止發送,並生成一個結束信號。寫操作的時序如圖3所示。

  

 

  圖3 I2C主設備寫操作時序

  要從EEPROM中讀取數據時,應設置R/W=1.在EEPROM發送完一個字節的數據後,主設備產生一個應答信號來響應,告知EEPROM主設備要求更多的數據,對應主設備產生的每個應答信號EEPROM將發送一個字節的數據。當主設備不發送應答信號並隨後發送結束信號位時結束此操作。讀操作的時序如圖4所示。

  

 

  圖4 I2C主設備讀操作時序

  3 Linux中I2C總線驅動體系結構

  在Linux系統中,對於一個給定的I2C總線硬體配置系統,I2C總線驅動程序體系結構由I2C總線驅動和I2C設備驅動組成。其中I2C總線驅動包括一個具體的控制器驅動和I2C總線的算法驅動。一個算法驅動適用於一類總線控制器。而一個具體的總線控制器驅動要使用某一種算法。例如,Linux內核中提供的算法i2e-algo-8260可以用在MPC82xx系列處理器提供的I2C總線控制器上。Linux內核中提供了一些常見處理器如MPC82xx系列的算法驅動。對於I2C設備,基本上每種具體設備都有自己的基本特性。其驅動程序一般都需要特別設計。

  在I2C總線驅動程序體系結構中。使用數據結構Driver來表示I2C設備驅動,使用數據結構Client表示一個具體的I2C設備。而對於I2C總線控制器,各種總線控制器在進行數據傳輸時採用的算法有好多種,使用相同算法的控制器提供的控制接口也可能不同。在I2C總線驅動程序體系結構中,用數據結構Algorithm來表示算法,用數據結構Adapter來表示不同的總線控制器。Linux內核的I2C總線驅動程序體系結構如圖5所示。

  

 

  圖5 Linux內核I2C總線驅動程序體系結構

  在圖5中,一個Client對象對應一個具體的I2C總線設備,而一種I2C設備的Driver可以同時支持多個Client.每個Adapter對應一個具體的I2C總線控制器。不同的I2C總線控制器可以使用相同的算法Algorithm.i2c-core是I2C總線驅動程序體系結構的核心,在這個模塊中,除了為總線設備驅動提供了一些統一的調用接口來訪問具體的總線驅動程序功能,以進行讀寫或設置操作外,還提供了將各種支持的總線設備驅動和總線驅動添加到這個體系中的方法,以及當不再使用這些驅動時將其從體系中刪除的方法。i2c-core將總線驅動程序體系一分為二,相互獨立。可以針對某個I2C總線設備來設計一個I2C設備驅動程序,而不需要關心系統的I2C總線控制器是何種類型,所以提高了其可移植性。另一方面,在設計I2C總線驅動時也可以不要考慮其將用來支持何種設備。因為i2c-core提供了統一的接口,所以也為設計這兩類驅動提供了方便。

linux作業系統文章專題:linux作業系統詳解(linux不再難懂)

linux相關文章:linux教程

上拉電阻相關文章:上拉電阻原理

相關焦點

  • Linux下I2C總線EEPROM驅動程序設計方法
    i2c-core、i2c-dev和i2c-proc是總線控制器和I2C設備所需要的核心模塊。對於MPC8250處理器,內核中還有MPC8260的算法模塊i2c-algo-8260,它也適用於MPC8250的I2C控制接口。這些模塊程序在默認條件下是不會被編譯到內核裡的,所以需要在配置Linux內核時把這些模塊選中。在筆者的開發中需要實現的是I2C總線控制器驅動和I2C設備EEPROM驅動。
  • 基於Linux系統的多種串行總線統一接口的實現
    關鍵詞:統一接口;嵌入式系統:Linux;設備驅動;串行總線0 引言在Linux內核中單獨實現TTY、I2C、SPI、ISA、USB等多種總線驅動時,每一種總線的實現都有各自的特點,如參數設置不同,實現的結構不同等。
  • 救活你的I2C總線故障方案出爐了!
    一、i2c 基本用法 i2c 總線是一種簡單、雙向二線制同步串行總線。所有主機在 SCL 線上產生它們自己的時鐘來傳輸總線上的報文,SDA 線傳輸每個字節必須為 8 位,每次傳輸可以發送的字節數量不受限制,每個字節後必須跟一個響應位。在空閒狀態時,SCL 與 SDA 均為高電平。
  • 樹莓派怎樣連接多個I2C設備
    打開APP 樹莓派怎樣連接多個I2C設備 網絡整理 發表於 2019-11-13 09:27:14 i2c總線可以處理多個設備,但是它們應具有不同的i2c地址。有些i2c設備具有用於設置其他i2c地址的跳線,但許多設備卻沒有。在這種情況下,您可以使用i2c多路復用器(硬體)來旋轉i2c SDA(數據)和SCL(時鐘),也可以創建其他i2c總線或更多。
  • 飛利浦推出業界首款快速模式I2C總線控制器
    控制器擴展了計算、通信和聯網應用中I2C總線的用途皇家飛利浦電子集團推出全球首款在400 kHz頻率和2.5-3.3V低壓下運行的並行到串行接口I2C總線控制器。PCA9564優化了多重I2C設備或SMus組件與微處理器、微控制器、數位訊號處理器(DSP)之間的連接。
  • I2C總線驅動在嵌入式系統中的兩種實現
    結構緊湊,因此其構成系統的成本較低;並且在總線上增加器件不會影響系統的正常工作,所有的I。C器件共用一套總線,因此其系統修改和可擴展性好。即使有不同時鐘速度的器件連接到總線上,時間同步機制也能夠很方便地確定總線時鐘,因此在嵌入式系統中得到了廣泛的應用。
  • 基於VHDL/CPLD的I2C串行總線控制器設計及實現
    常見的串行總線有USB、IEEE1394、I2C等,其中I2C總線具有使用簡單的特點,在單片機、串行E2PROM、LCD等器件中具有廣泛的應用。  I2C(Inter IC BUS)是Philips公司開發的用於晶片之間連接的總線。
  • Linux下常用的研發工具和環境
    但以上三種UML工具都只能在Windows環境下運行。Linux下,目前常用的UML工具為UMbrello。三、集成開發環境:當前Linux上,已有兩款優秀的集成開發環境KDevelop和Eclipse。Eclipse是目前最著名的一款開源集成開發環境。KDevelop目的是為KDE提供一個易用的集成開發環境(官網:www.kdevelop.org).
  • 基於嵌入式Linux的語音識別系統硬軟體設計
    主控晶片S3C2440通過SPI總線完成對語音識別模塊的讀寫操作,超聲波測距部分和舵機控制部分由處理器的GPIO進行統一控制。  處理器通過GPB0和GPB1分別控制兩個舵機以實現雲臺的旋轉,以測量不同方向的障礙物,如圖4所示。
  • 數字溫度傳感器DS1621在Linux下的IIC接口驅動設計
    Linux作業系統下的嵌入式設備驅動,通過IIC總線,實現ARM與外圍模塊間的協同工作,有著廣泛的應用。1 IIC總線協議以及選用晶片功能1.1 IIC總線的特點以及工作協議 IIC串行總線由兩根信號線組成:一根雙向傳輸的數據線SDA;另一根是時鐘線SCL。
  • 現場總線的智能冷陰極電離規控制器的實現
    摘 要: 介紹為大型超高真空系統(如加速器)研製的、基於現場總線的智能超高真空監控節點即冷陰極電離真空計的設計。1998年我們利用先進的電子設計工具和仿真技術,研製和開發了三款、兩種類型的超高真空計,它們均帶有符合CAN協議的現場總線接口、RS485接口、RS-232接口以及用於聯鎖保護快速響應的接口。這裡我們著重介紹基於CAN總線的冷陰極電離超高真空計的解決方案。 1 系統組成和工作原理 圖1是智能超高真空冷陰極電離真空計的示意圖。
  • 在uClinux環境下實現虛擬區域網
    本文在對VLAN技術和μClinux作業系統分析的基礎上,給出在μClinux環境下VLAN的實現方式與過程。 關鍵詞:μClinux VLAN IEEE802.1q引言虛擬區域網VLAN(Virtual Local Area Network)是指在交換區域網的基礎上,採用網絡管理軟體構建的可跨越不同網段、不同網絡的端到端的邏輯網絡。
  • 基於CAN總線的運動控制系統設計
    基於CAN總線的運動控制系統,主要由1個主節點(主控制器節點)、若干個從節點(電機控制節點)以及1臺計算機構成,主節點與從節點之間通過CAN總線進行通信,主節點與計算機之間則通過乙太網進行通信,如圖1所示。
  • spi與i2c總線有什麼區別
    也是所有基於SPI的設備共有的,它們是SDI(數據輸入)、SDO(數據輸出)、SCLK(時鐘)、CS(片選)。在主從通信中,可以有多個I2C總線器件同時接到I2C總線 上,通過地址來識別通信對象。   I2C 接口的協議裡面包括設備地址信息,可以同一總線上連接多個從設備,通過應答來互通數據及命令。但是傳輸速率有限,標準模式下可達到100Kbps,快速模式下可達到400Kbps(我們開發板一般在130Kbps),高速模式下達到4Mbps,不能實現全雙工,不適合傳輸很多的數據。
  • 推薦算法系統/人臉識別/深度學習對話機器人高級實戰課
    包含了推薦算法系統實戰、深度學習人臉識別實戰、深度學習對話機器人實戰等高級前沿的精品課程,下面分別介紹下各個實戰項目:1、推薦算法系統實戰首先推薦系統不等於推薦算法,更不等於協同過濾。下面我們就從推薦系統的整體架構以及各個子系統的實現給大家深度解密來自一線大型網際網路公司重量級的實戰產品項目!!!
  • 現場總線的開關量 I/O 模塊的總體方案設計
    20世紀80年代以來,開放的工業控制總線迅速發展,在此基礎上通過網絡連接的分散控制和嵌入式設備的控制技術逐步發展成熟,遠程I/O就是在這種條件下發展的一類產品,開放和通用是其主要特徵。本論文提出了一種基於MODBUS現場總線的開關量IO模塊設計,開關量的輸出和採集就是基於微波開關矩陣控制系統而設計的,採用RS485接口應用MODBUS協議與上位機通信,可同時進行16路開關量的控制和採集,通過上位機界面可靈活配置。
  • 示波器和I2C時序波形圖的關係分析
    示波器和I2C時序波形圖的關係分析 周碧俊 發表於 2018-08-03 16:57:53 I2C簡介 I2C總線只需要兩條線
  • linux下安裝虛擬機,完美在linux系統下運行通達信軟體
    現在越來越多的人使用linux系統,現在很多的國產作業系統都是基於linux內核上的。雖說不少的軟體都可以運行在linux的系統上。但是對於股票軟體來說在linux上的使用是一個硬傷。能夠運行在linux下的國內股票軟體少之又少。
  • eeprom行業景氣度較低,聚辰半導體能突出重圍嗎?
    除了以上的原因,還有一點是公司在市場多方均衡博弈下會顯現其真實的樣子,這一點尤其需要自負的投資者加以注意。今天的主角是聚辰半導體,上圖為聚辰的營收結構,很明顯其核心業務來源為eeprom晶片,eeprom從大類劃分為存儲晶片,2018年存儲晶片所佔集成電路晶片市場的份額為40.17%,是集成電路最大的晶片品種,其中存儲晶片包含2個品種:非易失性存儲晶片和易失性存儲片。
  • I2C總線設計注意事項
    當時在使用avr CPU設計數據採集器產品的CPU主板,外掛了Silicon lab的溫溼度傳感器Si7013,實時時鐘,主要實現溫溼度、時鐘及電流電壓等信號通過I²C總線到達CPU進行處理,並且由MCU EFM32WG290F64控制在液晶上和上位機界面上的CPU自帶的I²C總線外掛的六個I²C從設備,如下圖1所示。