



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、linux 內核 GPIO 模擬 I2C 實例2010-10-11 作者:cvip302814 來源:cvip302814 的 blog前言:在許多情況下,我們并沒有足夠的 I2C 總線,本文主在介紹如何利用 Linux 內核中的 i2c-gpio 模塊,利用 2 條 GPIO 線模擬 i2c 總線,并掛載設備。思路:先通過對 i2c-gpio 所定義的結才體初始化(包括初始化 i2c 的 2 條線,頻率,timeout 等)并將 i2c-gpio 模塊編譯進內核,實現用 GPIO_X,GPIO_Y2 條 GPIO線注冊新的 i2c 總線。此時這個模塊對 i2c 設備是透明的,及掛在這 2 條
2、 GPIO線的 i2c 設備可以直接使用 Linux 內核通用的 i2c 設備注冊,傳輸和注銷等方法。步驟:首先確認在注冊 i2c-gpio 模塊前,所要用到的 2 條 GPIO 口是沒有被系統其它地方所調用的。在每個系統平臺啟動時,都會打開一系列的設備,他們通常實現在 arch/目錄下相應的平臺子目錄中的例如 setupsdevices.c 文件中,在這里我們進行 i2c 總線的注冊以及設備的掛載。i2c-gpio 定義的結構在include/linux/i2c-gpio.h 中:/* structi2c_gpio_platform_data-Platform-dependentdatafo
3、ri2c-gpio* sda_pin:GPIOpinIDtouseforSDA* scl_pin:GPIOpinIDtouseforSCL* udelay:signaltoggledelay.SCLfrequencyis(500/udelay)kHz* timeout:clockstretchingtimeoutinjiffies.Iftheslavekeeps* SCLlowforlongerthanthis,thetransferwilltimeout.* sda_is_open_drain:SDAisconfiguredasopendrain,i.e.thepin* isntactive
4、lydrivenhighwhensettingtheoutputvaluehigh.* gpio_get_value()mustreturntheactualpinstateevenifthe* pinisconfiguredasanoutput.* scl_is_open_drain:SCLissetupasopendrain.Samerequirements* asforsda_is_open_drainapply.* scl_is_output_only:SCLoutputdriverscannotbeturnedoff.*/structi2c_gpio_platform_datauns
5、ignedintsda_pin;unsignedintscl_pin;intudelay;inttimeout;unsignedintsda_is_open_drain:1;unsignedintscl_is_open_drain:1;unsignedintscl_is_output_only:1;);其中 sda_pin 和 scl_pin 分別是 i2c 總線的數據線和時鐘線, 在 i2c-gpio 中會通過 gpio_request 函數對這 2 個口進行申請,udelay 和 timeout 如果不設初值,i2c-gpio 中會自動將其設為默認值。if(pdata-udelay)bit
6、_data-udelay=pdata-udelay;elseif(pdata-scl_is_output_only)bit_data-udelay=50;/*10kHz*/elsebit_data-udelay=5;/*100kHz*/if(pdata-timeout)bit_data-timeout=pdata-timeout;elsebit_data-timeout=HZ/10;/*100ms*/初始化這個結構體后再將其裝入 platform_device 結構體,方便注冊:staticstructplatform_devicei2c_device=.name=device-name,.i
7、d=your-id,.dev=.platform_data=&i2c_data,/i2c_gpio_platform_data),);注冊 i2c-gpio 設備將 i2c 設備掛入我們注冊的總線:platformdeviceregister(&i2cdevice);staticstructi2c_board_infoi2c_device=一一一I2C_BOARD_INFO(name,i2c_device_addr),);i2cregisterboardinfo(your-id,i2cdevice,ARRAYSIZE(i2cdevice);此時我們就可以在 i2c 設備的驅動程
8、序中通過遍歷所在 i2c 總線,得到其所在的地址 i2c_device_addn在 i2c 驅動中,需要注冊一個 i2c_driver 的結構體,例如:staticconststructi2c_device_idlis35de_id=lis35de,0,);staticstructi2c_driverst_lis35de_driver=.probe=st_lis35de_probe,.remove=st_lis35de_remove,.suspend=st_lis35de_suspend,.resume=st_lis35de_resume,.id_table=lis35de_id,.drive
9、r=.name=lis35de,;staticint_initst_lis35de_init(void)一-printk(KERN_INFOst_lis35de_initn);returni2c_add_driver(&st_lis35de_driver);在 init 時用 i2c_add_driver(&st_lis35de_driver),此時將會對所在 i2c 總線進行遍歷并得到康備而適配器等 7 言息, .目的即是使驅動得到自己的 i2c_client,在這個 i2c_client 中, 已經有了該 i2c 設備的地址等信息, 我們在驅動中定義一個新的i2c_clie
10、nt 全局變量,把得到的這個 i2c_client 傳給這個全局變量,從而可以繼續正面的 i2c 操作。此時我們就可以使用通用的 i2c 讀寫操作了。總結:直接用 GPIO 口模擬 I2C 時序和利用內核模塊 i2c-gpio 虛擬 i2c 總線的區別:1 .用 GPIO 口模擬 I2C 時序不需要在系統啟動時注冊 I2C 總線,只需要在 I2C設備驅動中單獨實現。用 i2c-gpio 模塊虛擬 i2c 總線需要在系統啟動時注冊新的I2C 總線,并將 i2c 設備掛載到新的 i2c 總線,涉及的范圍較廣。2.用 GPIO 口模擬 I2C 時序,代碼操作較繁瑣,且不方便掛載多個 i2c設備。用
11、i2c-gpi。模塊可以完全模擬 i2c 總線,可以掛載多個設備。3 .在 i2c 讀寫操作時, 用 GPIO 口模擬 I2C 時序需要每次根據讀/寫操作發送器件地址1+1/0,然后再發送寄存器地址。用 i2c-gpio 模塊相當于直接在 i2c 總線上操作,在系統啟動掛載 i2c 設備時已經告訴了 i2c 總線它的地址,在該設備自己的驅動中,只需要通過 i2c_add_driver 操作即可以得到其地址等諸多信息,讀寫操作只需要發送寄存器地址即力。附:i2c 一般的讀寫操作#include/*讀操作:*/staticinti2c_RxData(char*rxData,intlength).structi2c_msgmsgs口=/*冠1 個字節的 i2c 設備寄存器地址告訴總線*/.addr=client-addr,.flags=0,/操作.len=1,.buf=rxData,/*從總線讀取 length 個字節的數據,存入 rxData*/.addr=client-addr,.flags=I2C_M_RD,/I2C_M_RD 在 i2c.h 中被定義為 1,讀操作.len=length,.buf=rxDat
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年上海市金融穩定發展研究中心招聘筆試真題
- 中國環保涂料行業市場發展現狀及發展趨勢與投資策略研究報告2025-2028版
- 中國清源膠囊行業市場發展前景及發展趨勢與投資戰略研究報告2025-2028版
- 反應條件對產物選擇性的影響試題及答案
- 中國植絨皮帶架行業市場發展前景及發展趨勢與投資戰略研究報告2025-2028版
- 中國木制工藝畫行業市場發展前景及發展趨勢與投資戰略研究報告2025-2028版
- 七上 地理試題及答案
- 2025年土木考試思維導圖應用方式試題及答案
- 空氣質量管理與污染源頭控制考核試卷
- 畜牧良種繁殖配種技術與繁殖率優化考核試卷
- 2025北京各區高三一模數學分類匯編解析 答案
- 制冷機組維保合同標準文本
- 第18課《井岡翠竹》 課件
- 質量信譽考核自評報告3篇
- 胃腸炎護理教學查房
- 護士站管理制度
- 藥物服用指導與患者教育試題及答案
- (四調)武漢市2025屆高中畢業生四月調研考試 英語試卷
- 特種設備事故壓力容器應急預案演練記錄
- 鐵道概論道岔的結構課件
- 2025-2030中國硫代硫酸銨行業市場現狀供需分析及投資評估規劃分析研究報告
評論
0/150
提交評論