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

i2c總線的組成,及其作用 i2c總線的優(yōu)點(diǎn)是什么
數(shù)字溫度傳感器系統(tǒng)接口:SPI、I2C 、SMBus如何選
怎樣配置基于msp430G2553的數(shù)字溫度傳感器?
i2c總線ppt(I2C總線器件應(yīng)用)
基于I2C總線的DS1629型智能溫度傳感器

使用MPU6050傳感器讀取I2C總線數(shù)據(jù)的程序免費(fèi)下載

你不能不知的I2C總線

I2C串行總線協(xié)議是什么?I2C總線有哪些優(yōu)點(diǎn)?
使用MSP430 MCU簡(jiǎn)化溫度、濕度和光學(xué)I2C傳感器

評(píng)論