I2C設備驅動

来源:https://www.cnblogs.com/laoyaodada/archive/2018/02/01/8399738.html
-Advertisement-
Play Games

I2C設備驅動要使用i2c_driver和i2c_client數據結構並填充i2c_driver中的成員函數。i2c_client一般被包含在設備的私有信息結構體xxx_data中,而i2c_driver則適合被定義為全局變數並初始化。下麵提供i2c_driver的初始化模版: 1 Linux I2 ...


I2C設備驅動要使用i2c_driver和i2c_client數據結構並填充i2c_driver中的成員函數。i2c_client一般被包含在設備的私有信息結構體xxx_data中,而i2c_driver則適合被定義為全局變數並初始化。下麵提供i2c_driver的初始化模版:

1 static struct i2c_driver xxx_driver = {
2     .driver = {
3         .name = "xxx",
4     },
5     .probe = xxx_probe,
6     .remove = xxx_remove,
7     .id_table = xxx_id,
8 };

1  Linux I2C設備驅動的模塊載入和卸載

I2C設備驅動的模塊載入用i2c_add_driver()來完成;模塊卸載用i2c_del_driver()來完成。

1 static int __init xxx_init(void) {
2     return i2c_add_driver(&xxx_driver);
3 }
4 module_init(xxx_init);
5 
6 static void __exit xxx_exit(void) {
7     i2c_del_driver(&xxx_driver);
8 }
9 module_exit(xxx_exit);

2  Linux I2C設備驅動的數據傳輸

在I2C設備上讀寫數據是通過i2c_msg數組進行組織的,最後通過i2c_transfer()函數完成。

下麵提供I2C設備驅動數據傳輸模版:

 1 struct i2c_msg msg[2];
 2 /* 第一條消息是寫消息(從機地址) */
 3 msg[0].addr = client->addr;
 4 msg[0].flags = 0;
 5 msg[0].len = 1;
 6 msg[0].buf = &offs;
 7 /* 第二條消息是讀消息 */
 8 msg[1].addr = client->addr;
 9 msg[1].flags = I2C_M_RD;
10 msg[1].len = sizeof(buf);
11 msg[1].buf = &buf[0];
12 i2c_transfer(client->adapter, msg, 2);

3  Linux的i2c-dev.c文件分析

i2c-dev.c文件完全可以被看作是一個I2C設備驅動。i2c-dev.c針對每個I2C適配器生成一個主設備號89的設備文件,實現了i2c_driver的成員函數以及文件操作介面,因此i2c-dev.c的主體是“i2c_driver成員函數+字元設備驅動”。

i2c-dev.c提供的i2cdev_read()、i2c_write()函數對應於用戶空間要使用的read()和write()文件操作介面,這兩個函數分別調用I2C核心的i2c_master_recv()和i2c_master_send()函數來構造一條I2C消息並引發適配器Algorithm通信函數的調用,以完成消息的傳輸。

但是,大多數稍微複雜一點的I2C設備的讀寫流程並不對應於一條消息,往往需要兩條甚至多條消息來進行一次讀寫周期(對應於上圖的重覆開始位的RepStart模式),在這種情況下,在應用層仍然調用read()、write()文件API來讀寫I2C設備,將不能正確地讀寫。

鑒於上述原因,i2c-dev.c中的i2cdev_read()和i2cdev_write()函數不具備太強的通用性,沒有太大的實用價值,只能適用於非RepStart模式的情況。對於由兩條以上消息組成的讀寫,在用戶空間需要組織i2c_msg消息數組並調用I2C_RDWR IOCTL命令。

 代碼模板下載

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 守護進程的特點 守護進程(Daemon)是在後臺運行的一種特殊進程,它脫離於終端,從而這可避免進程被任何終端所產生的信號打斷,它在執行進程中的產生信息也不在任何終端上顯示。守護進程周期性地執行某種任務或等待處理某些發生的事件,Linux的大多數伺服器就是用守護進程實現的。 守護進程編程要點 1.屏蔽 ...
  • 英文原文: https://www.linuxatemyram.com/ 作者: "Vidar Holen" 譯者: "thinkam" 發生了什麼? Linux正借用你未使用的記憶體來做磁碟緩存。這使你的電腦看起來可用記憶體很少,但事實不是這樣!一切都很正常! 為什麼這麼做? 磁碟緩存使你的系統運行 ...
  • centos7與之前的版本都不一樣,修改主機名在/ect/hostname 和/ect/hosts 這兩個文件控制 首先修改/ect/hostname vi /ect/hostname 打開之後的內容是: localhost.localdomain 把它修改成你想要的名字就可以,比如: niukou ...
  • 1.echo 輸出字元,或者輸出變數的值。 2.date %Y:年; %m:月; %d:日; %H:小時,24小時制; %I:小時,12小時制; %M:分鐘; %S:秒; %F:年-月-日; %T:時-分-秒; -s:設置日期和時間; 3.reboot 重啟電腦。 4.poweroff 關機。 5 ...
  • 1. Oracle官網下載JDK linux安裝包,這裡使用的是【jdk-8u11-linux-i586.tar.gz】 註:下載前先用命令查看系統位數再下載對應位數的JDK【[root@localhost /]# getconf LONG_BIT】 2. 在 usr 文件夾下新增 java 文件夾 ...
  • 這裡介紹Linux下兩種安裝mysql的方式:yum安裝和源碼編譯安裝。 1. yum安裝 (1)首先查看centos自帶的mysql是否被安裝: (2)下載MySQL官網的yum倉庫:https://dev.mysql.com/downloads/repo/yum/, (3)使用mysql yum ...
  • shell 什麼是shell bash shell bash的配置文件 shell 登錄兩種方式 bash中的退出時的任務 ...
  • 編譯安裝 程式包編譯 編譯安裝 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...