問題與解答:
*linux自帶的驅動怎么用的?
看lm75.c的代碼,發(fā)現(xiàn)此溫度傳感器用的是I2C的總線。代碼中看到i2c驅動的接口定義如下,和以前做過的字符型驅動的接口不一樣。
在linux Device Driver這本書中搜,在此書中無介紹。
www.linuxjournal.com/article/7136,www.linuxjournal.com/article/7252講得還不錯。尤其是后者對路。I2C在讀主板上的傳感器的應用上應用比較多,但它是在比較新的版本的LINUX內核版本中才加進來的,難怪LDD這本書中沒有講了。
再看上面數(shù)據(jù)結構中的回調函數(shù),具體干什么就比較清楚了。根據(jù)函數(shù)內容得知,驅動在加載的時候會自動檢測I2C總線上的設備,因此會自動發(fā)現(xiàn)溫度傳感器。lm75_update_device()是對溫度傳感器進行輪詢讀數(shù)時用的函數(shù)。
根據(jù)文章指引,看設備的/sys/bus/i2c/。下面已經有了lm75傳感器的數(shù)據(jù),直接讀是有數(shù)據(jù)的,而且數(shù)據(jù)會變化,如下:
root:~# cat /sys/bus/i2c/devices/0-0048/temp1_input-31500
*讀數(shù)為負。什么樣的讀數(shù)才是正常的?在驅動代碼里增加了調試信息,打印出傳感器上讀的寄存器的值,和文件系統(tǒng)上讀出的不一樣。
看 linux-2.6.20.21/Documentation/hwmon/lm75,了解到lm75是一個工業(yè)標準。所以linux里的lm75驅動是支持多種溫度傳感器的。
看了一下板子上的芯片,是lm75A.在網上下載了一個datasheet,上面顯示一共9-bit來控制讀數(shù)。頭位為正負,后面8-bit為值。
在驅動代碼里添加調試信息,只打印寄存器值的后8-bit,放到溫度實驗箱里測試的結果看起來滿合理的。
然后把內核的lm75.h的代碼修正(只讀后面8個比特并根據(jù)大小判斷正負),測試通過。
-
溫度傳感器
+關注
關注
48文章
2892瀏覽量
155803 -
總線
+關注
關注
10文章
2859瀏覽量
87915 -
I2C
+關注
關注
28文章
1477瀏覽量
123071
原文標題:實例講解!嵌入式Linux下的I2C溫度傳感器的應用
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論