久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Linux下讀寫芯片的I2C寄存器

     昵稱15515903 2014-08-15
    Linux下讀寫芯片的I2C寄存器

        要想在Linux下讀寫芯片的I2C寄存器,一般需要在Linux編寫一份該芯片的I2C驅動,關于Linux下如何編寫I2C驅動,前一篇文章《手把手教你寫Linux I2C設備驅動》已經做了初步的介紹,并且留下了兩個疑問尚未解決,第一個是如何對Linux提供的I2C操作函數進行進一步封裝,實現對芯片寄存器的讀寫;另一個是如何在用戶空間調用該I2C驅動代碼。本文將討論前一個問題。

        首先,我們要了解Linux系統提供的I2C操作函數怎么使用,上篇文章已經提到過,對I2C設備的讀寫,Linux系統提供了多種接口,這些接口可以在內核的 i2c.h 中找到,這里我主要介紹下面這組讀寫接口:

    1. extern int i2c_master_send(struct i2c_client *,const char* ,int);    
    2.    
    3. extern int i2c_master_recv(struct i2c_client *,char* ,int); 

        第一個參數是 i2c_client 對象指針,第二個參數是要傳輸的數據buffer指針,第三個參數為buffer的大小。

        接口函數已經有了,下面我們要解決的問題就是以何種形式/規則去使用這些接口才能正確地讀寫芯片的相關寄存器。

        首先,我們需要查詢芯片手冊,找到芯片手冊中,關于寄存器的I2C讀寫時序,其實,大多數芯片的I2C寄存器的讀寫時序都是一樣的,下面我還是以手頭的TVP5158芯片為例。

        首先分析寫操作,該芯片的手冊中給出的I2C寄存器寫時序圖如下:

        從上圖可以看出,真正需要執行寫操作的有兩處,Step4 和 Step6 ,Step4首先寫入寄存器的偏移地址,而Step6則是寫入到該寄存器的值。由此已經很清楚了,對于寫I2C寄存器,我們需要做的就是給 i2c_master_send 函數傳入兩個字節的數據即可,第一個字節為寄存器的地址,第二個字節為要寫入寄存器的數據。示例如下:

    1. static int tvp5158_i2c_write( struct i2c_client* client,uint8_t reg,uint8_t data)  
    2. {  
    3.     unsigned char buffer[2];  
    4.       
    5.     buffer[0] = reg;  
    6.     buffer[1] = data;  
    7.       
    8.     if( 2!= i2c_master_send(client,buffer,2) ) {  
    9.         printk( KERN_ERR " tvp5158_i2c_write fail! \n" );  
    10.         return -1;  
    11.     }      
    12.     return 0;  

        其實挺簡單的,沒有什么復雜的代碼。下面再看看讀時序。

         由上圖可以,讀時序需要做的操作是,先向I2C總線上寫入需要讀的寄存器地址,然后讀I2C總線上的值。代碼寫起來也不難,示例如下:

    1. static int tvp5158_i2c_read( struct i2c_client* client,uint8_t reg,uint8_t *data)  
    2. {  
    3.     // write reg addr     
    4.     if( 1!= i2c_master_send(client,&reg,1) ) {  
    5.         printk( KERN_ERR " tvp5158_i2c_read fail! \n" );  
    6.         return -1;  
    7.     }      
    8.     // wait  
    9.     msleep(10);  
    10.     // read  
    11.     if( 1!= i2c_master_recv(client,data,1) ) {  
    12.         printk( KERN_ERR " tvp5158_i2c_read fail! \n" );  
    13.         return -1;  
    14.     }      
    15.       
    16.     return 0;  

        到此為止,Linux下具體如何封裝讀寫芯片寄存器的方法已經介紹完畢,其實并不復雜,希望對初學者有所幫助,文中有什么講述不正確的地方,歡迎留言或者來信lujun.hust@gmail.com交流。

    本文出自 “對影成三人” 博客,請務必保留此出處http://ticktick.blog.51cto.com/823160/760965

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 亚洲中文字幕久久精品无码A| 女人的天堂A国产在线观看| 又爽又黄又无遮掩的免费视频| 国产成人啪精品视频免费APP | 久久综合色天天久久综合图片| 亚洲av无码成人精品区一区 | 美女内射毛片在线看免费人动物| 综合偷自拍亚洲乱中文字幕| 国产综合有码无码中文字幕| 亚洲国产成人精品女人久久久| 国产免费无遮挡吃奶视频| 国产色视频一区二区三区| XXXXXHD亚洲日本HD| 亚洲AV无码一区二区三区性色 | 国产免费无遮挡吃奶视频| 精品国产亚洲一区二区三区| 超清无码熟妇人妻AV在线电影| 无码高潮少妇毛多水多水免费| 亚洲国产日韩一区三区| 亚洲精品乱码久久久久久自慰 | 午夜性爽视频男人的天堂| 少妇激情AV一区二区三区| 国产成AV人片在线观看天堂无码| 日韩少妇人妻vs中文字幕| 另类国产精品一区二区| 国产成人午夜精品福利| 男女无遮挡XX00动态图120秒| 亚洲AV无码精品色午夜果冻| 一区二区中文字幕久久| 天天夜碰日日摸日日澡性色AV | 不卡乱辈伦在线看中文字幕| 日韩人妻无码一区二区三区| 日本XXXX色视频在线观看免费不卡 | 噜噜综合亚洲av中文无码| 久久国产福利播放| 69天堂人成无码免费视频 | 亚洲人妻系列中文字幕| 国偷自产AV一区二区三区| 乱人伦中文字幕成人网站在线| 白嫩少妇无套内谢视频| 夜夜爽妓女8888视频免费观看|