《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 其他 > Linux驅動開發-編寫DS18B20驅動

Linux驅動開發-編寫DS18B20驅動

2022-09-29
來源:電子發燒友網

  【摘要】 當前文章介紹如何在Linux系統下編寫一個DS18B20溫度傳感器驅動,測量環境溫度,并將DS18B20注冊成字符設備,通過文件接口將溫度數據傳遞給應用層。

  1. 前言

  當前文章介紹如何在Linux系統下編寫一個DS18B20溫度傳感器驅動,測量環境溫度,并將DS18B20注冊成字符設備,通過文件接口將溫度數據傳遞給應用層。

  當前使用的開發板是友善之臂的Tiny4412開發板,CPU是三星的Exynos-4412,主頻是4核1.5GHZ,當前運行的Linux內核版本是3.5。使用的溫度傳感器是DS18B20,是一個數字溫度傳感器,非常經典的一款溫度傳感器,常年應用在各大高校畢設、實驗室、畢設、課設場景。DS1820接線比較簡單,只需要一根線就行,加上兩根電源線,一共3根線,并且DS18B20支持硬件序列號尋址,支持一個IO口上掛載多個DS18B20。

  2. DS18B20介紹

  DS18B20特性:

  (1)全數字溫度轉換及輸出。

  (2)先進的單總線數據通信。

  (3)最高 12 位分辨率,精度可達土 0.5 攝氏度。

  (4)12 位分辨率時的最大工作周期為 750 毫秒。

  (5)可選擇寄生工作方式。

  (6)檢測溫度范圍為-55° C ~+125° C (-67° F ~+257° F)

  (7)內置 EEPROM,限溫報警功能。

  (8)64 位光刻 ROM,內置產品序列號,方便多機掛接。

  (9)多樣封裝形式,適應不同硬件系統。

  

13.JPG

  DS18B20引腳功能

  GND 電壓地

  DQ 單數據總線

  VDD 電源電壓

  NC 空引腳

  DS18B20讀取溫度的步驟:

  發送復位信號-->

  檢測回應信號--->

  發送0xCC-->發送0x44->

  發送復位信號->

  檢測回應信號->

  寫0xcc--->

  寫0xbe--->

  循環8次讀取溫度低字節--->

  循環8次讀取溫度高字節---->

  打印溫度信息

  DS18B20溫度轉換示例:

  u16 temp;

  u8 TL,TH;

  u16 intT,decT;               //溫度值的整數和小數部分

  TL=DS18B20_Read_Byte();       //讀取溫度低8位LSB

  TH=DS18B20_Read_Byte();       //讀取溫度高8位MSB

  temp=((u16)TH《8)|TL;          //將讀出的溫度高低位組合成16位的值

  intT = temp 》 4;                //分離出溫度值整數部分

  decT = temp & 0xF;              //分離出溫度值小數部分

  printf(“A: %d.%d\r\n”,(int)intT,(int)decT); //打印實際溫度值

  3. 硬件接線圖

  Tiny4412開發板擴展GPIO口:

14.JPG

捕獲.JPG

  4. 示例代碼

  復制

  #include

  #include

  #include    /*雜項字符設備頭文件*/

  #include            /*文件操作集合*/

  #include         /*延時函數*/

  #include

  #include

  /*DS18B20 GPIO接口: GPB_4*/

  /*定義指針,用于接收虛擬地址*/

  volatile unsigned int *DS18B20_GPBCON;

  volatile unsigned int *DS18B20_GPBDAT;

  #define DS18B20_INPUT()  {*DS18B20_GPBCON &= ~(0xf  《 4 * 4);}

  #define DS18B20_OUTPUT() {*DS18B20_GPBCON &= ~(0xf  《 4 * 4);*DS18B20_GPBCON |=  (0x1   《 4 * 4);}

  /*

  函數功能:等待DS18B20的回應

  返回1:未檢測到DS18B20的存在

  返回0:存在

  */

  unsigned char DS18B20_Check(void)

  {

  unsigned char retry=0;

  DS18B20_INPUT() ///SET PG11 INPUT

  while((*DS18B20_GPBDAT & (1 《 4))&&retry<200)

  {

  retry++;

  udelay(1);

  };

  if(retry>=200)return 1;

  else retry=0;

  while(!(*DS18B20_GPBDAT & (1 《 4))&&retry<240)

  {

  retry++;

  udelay(1);

  };

  if(retry>=240)return 1;

  return 0;

  }

  /*

  從DS18B20讀取一個位

  返回值:1/0

  */

  unsigned char DS18B20_Read_Bit(void)  // read one bit

  {

  unsigned char data;

  DS18B20_OUTPUT();

  *DS18B20_GPBDAT &= ~(1 《 4);//輸出0

  udelay(2);

  *DS18B20_GPBDAT |= (1 《 4);//輸出1

  DS18B20_INPUT()

  udelay(12);

  if((*DS18B20_GPBDAT & (1 《 4)))data=1;

  else data=0;

  udelay(50);

  return data;

  }

  /*

  從DS18B20讀取一個字節

  返回值:讀到的數據

  */

  unsigned char DS18B20_Read_Byte(void)    // read one byte

  {

  unsigned char i,j,dat;

  dat=0;

  for(i=1;i<=8;i++)

  {

  j=DS18B20_Read_Bit();

  dat=dat》1;

  if(j)        //主機對總線采樣的數 判斷-------讀數據-1就是1,否則就是0

  dat|=0x80;   //先收低位數據--一步一步向低位移動》

  }

  return dat;

  }

  /*

  寫一個字節到DS18B20

  dat:要寫入的字節

  */

  void DS18B20_Write_Byte(unsigned char dat)

  {

  unsigned char j;

  unsigned char testb;

  DS18B20_OUTPUT();

  for(j=1;j<=8;j++)

  {

  testb=dat&0x01;

  dat=dat》1;

  if(testb)

  {

  *DS18B20_GPBDAT &= ~(1 《 4);//輸出0// Write 1

  udelay(2);

  *DS18B20_GPBDAT |= (1 《 4);//輸出1

  udelay(60);

  }

  else

  {

  *DS18B20_GPBDAT &= ~(1 《 4);//輸出0// Write 0

  udelay(60);

  *DS18B20_GPBDAT |= (1 《 4);//輸出1

  udelay(2);

  }

  }

  }

  /*

  從ds18b20得到溫度值

  精度:0.1C

  返回值:溫度值 (-550~1250)

  */

  short DS18B20_Get_Temp(void)

  {

  unsigned short aaa;

  unsigned char temp;

  unsigned char TL,TH;

  DS18B20_OUTPUT();

  *DS18B20_GPBDAT &= ~(1 《 4);//輸出0 //拉低DQ

  udelay(750);    //拉低750us

  *DS18B20_GPBDAT |= (1 《 4);//輸出1 //DQ=1

  udelay(15);     //15US

  DS18B20_Check();

  DS18B20_Write_Byte(0xcc);

  DS18B20_Write_Byte(0x44);

  DS18B20_OUTPUT();

  *DS18B20_GPBDAT &= ~(1 《 4);//輸出0 //拉低DQ

  udelay(750);    //拉低750us

  *DS18B20_GPBDAT |= (1 《 4);//輸出1 //DQ=1

  udelay(15);     //15US

  DS18B20_Check();

  DS18B20_Write_Byte(0xcc);// skip rom

  DS18B20_Write_Byte(0xbe);// convert

  TL=DS18B20_Read_Byte();  // LSB

  TH=DS18B20_Read_Byte();  // MSB

  aaa=((unsigned short)TH《8)|TL;

  return aaa;

  }

  /*

  雜項字符設備注冊示例----->DS18B20

  */

  static int tiny4412_open(struct inode *my_inode, struct file *my_file)

  {

  /*映射物理地址*/

  DS18B20_GPBCON=ioremap(0x11400040,4);

  DS18B20_GPBDAT=ioremap(0x11400044,4);

  printk(“DS18B20初始化成功!\r\n”);

  /*設置ds18b20為輸出模式*/

  *DS18B20_GPBCON &= ~(0xf  《 4 * 4);

  *DS18B20_GPBCON |=  (0x1  《 4 * 4);

  return 0;

  }

  static int tiny4412_release(struct inode *my_inode, struct file *my_file)

  {

  /*釋放虛擬地址*/

  iounmap(DS18B20_GPBCON);

  iounmap(DS18B20_GPBDAT);

  printk(“DS18B20釋放成功\r\n”);

  return 0;

  }

  static ssize_t tiny4412_read(struct file *my_file, char __user *buf, size_t len, loff_t *loff)

  {

  /*讀取溫度信息*/

  short temp=DS18B20_Get_Temp();

  copy_to_user(buf,&temp,2);    //拷貝溫度至應用層

  return 0;

  }

  static ssize_t tiny4412_write(struct file *my_file, const char __user *buf, size_t len, loff_t *loff)

  {

  return 0;

  }

  /*文件操作集合*/

  static struct file_operations tiny4412_fops=

  {

  .open=tiny4412_open,

  .read=tiny4412_read,

  .write=tiny4412_write,

  .release=tiny4412_release

  };

  /*

  核心結構體

  */

  static struct miscdevice tiny4412_misc=

  {

  .minor=MISC_DYNAMIC_MINOR,  /*自動分配次設備號*/

  .name=“DS18B20”,      /*設備文件,指定/dev/生成的文件名稱*/

  .fops=&tiny4412_fops

  };

  static int __init DS18B20_dev_init(void)

  {

  /*雜項設備注冊*/

  misc_register(&tiny4412_misc);

  return 0;

  }

  static void __exit DS18B20_dev_exit(void)

  {

  /*雜項設備注銷*/

  misc_deregister(&tiny4412_misc);

  }

  module_init(DS18B20_dev_init);

  module_exit(DS18B20_dev_exit);

  MODULE_LICENSE(“GPL”);




更多信息可以來這里獲取==>>電子技術應用-AET<<

mmexport1621241704608.jpg

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
欧美激情办公室aⅴ_国产欧美综合一区二区三区_欧美午夜精品久久久久免费视_福利视频欧美一区二区三区

          欧美黄污视频| 欧美午夜久久| 欧美中文字幕| 欧美日韩1区| 最新日韩在线| 男人的天堂成人在线| 欧美永久精品| 99伊人成综合| 欧美精品一线| 亚洲欧美国产精品桃花| 欧美日韩国产精品一区二区亚洲| 亚洲国产精品久久久久久女王 | 亚洲激情二区| 久久国产日韩欧美| 亚洲理论在线| 欧美视频福利| 精品9999| 午夜电影亚洲| 一区二区三区四区五区视频| 欧美一区免费视频| 国产区日韩欧美| 欧美日韩在线高清| 久久国产主播| 国产精品久久777777毛茸茸| 在线播放精品| 欧美日韩免费观看一区| 欧美亚洲自偷自偷| 国产精品久久国产三级国电话系列 | 亚洲免费播放| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 在线一区免费观看| 在线观看亚洲| 国内久久精品| 午夜日韩激情| 欧美在线91| 狂野欧美一区| 久久久久久夜| 久久亚洲二区| 久久婷婷麻豆| 欧美一区二区三区在线免费观看| 亚洲一卡久久| 国产精品免费在线| 亚洲一区二区三区色| 一区二区三区成人精品| 99亚洲一区二区| 国产亚洲成人一区| 国产久一道中文一区| 国产亚洲精品自拍| 西西裸体人体做爰大胆久久久| 国产精品日韩欧美一区二区三区 | 亚洲午夜精品久久久久久浪潮 | 好吊视频一区二区三区四区| 久久久福利视频| 久久国产高清| 欧美激情日韩| 亚洲国产日韩在线| 国产日韩三区| 老鸭窝毛片一区二区三区| 久久激情久久| 黑人一区二区| 亚洲深夜福利| 欧美久久在线| 亚洲三级色网| 久久一日本道色综合久久| 久久综合福利| 91久久视频| 久久久精彩视频| 黄色欧美成人| 午夜一区二区三区不卡视频| 欧美日韩视频在线一区二区观看视频| 极品日韩久久| 午夜亚洲影视| 激情久久中文字幕| 先锋亚洲精品| 亚洲成人中文| 午夜精品婷婷| 一区二区三区久久网| 欧美福利一区| 国产精品手机视频| 国产精品国码视频| 亚洲综合二区| 一区二区三区四区五区在线| 欧美不卡福利| 久久高清国产| 99在线|亚洲一区二区| 午夜精品一区二区三区四区 | 欧美日韩精品免费观看视频完整| 亚洲免费激情| 一区在线免费| 国产精品chinese| 久久久久久久久一区二区| 国产亚洲毛片| 久久国产免费| 99国产精品私拍| 激情久久久久| 欧美日韩免费观看一区| 久久精品盗摄| 亚洲在线黄色| 国产日韩欧美二区| 黄色免费成人| 国产综合色产| 久久一日本道色综合久久| 国产精品一区毛片| 国产欧美精品久久| 一区二区不卡在线视频 午夜欧美不卡'| 欧美日韩在线精品一区二区三区| 麻豆精品传媒视频| 久久xxxx精品视频| 翔田千里一区二区| 免费视频一区| 久久国产精品一区二区三区| 国产日韩一区二区三区在线| 99在线|亚洲一区二区| 91久久精品国产91久久性色tv| 欧美午夜一区二区福利视频| 欧美日韩岛国| 亚洲先锋成人| 亚洲麻豆一区| 国产精品视频免费观看| 久久精品天堂| 久久亚洲二区| 欧美日韩网址| 影音先锋日韩资源| 亚洲精品乱码| 国产精品久久777777毛茸茸| 国产精品最新自拍| 麻豆av一区二区三区| 小嫩嫩精品导航| 麻豆成人av| 国产综合自拍| 亚洲精品美女91| 亚洲深夜福利| 久久亚洲不卡| 激情综合久久| 国产模特精品视频久久久久| 麻豆久久久9性大片| 欧美一区精品| 亚洲国产日韩美| 亚洲一区二区三区免费观看 | 欧美一区二区在线| 欧美日韩亚洲国产精品| 黑人中文字幕一区二区三区| 亚洲精品久久久久久一区二区| 99这里有精品| 久久久久天天天天| 亚洲小说欧美另类婷婷| 国产日韩欧美亚洲一区| 欧美国产先锋| 国产欧美一区二区色老头| 狂野欧美性猛交xxxx巴西| 91久久视频| 欧美日韩精品| 免费亚洲一区二区| 亚洲国产一区在线| 欧美.日韩.国产.一区.二区| 亚洲免费精品| 欧美在线国产| 国产精品日本欧美一区二区三区| 午夜欧美精品久久久久久久| 99热在线精品观看| 好吊日精品视频| 美女国产一区| 国产一区导航| 亚洲欧洲精品一区二区| 欧美另类综合| 久久亚洲不卡| 另类图片国产| 一本色道久久综合亚洲精品不卡 | 夜夜爽www精品| 欧美三区在线| 欧美一区国产一区| 亚洲一区二区三区涩| 亚洲欧洲一区| 狠狠色噜噜狠狠狠狠色吗综合| 久久精品女人| 在线一区免费观看| 欧美成ee人免费视频| 亚洲欧美视频一区二区三区| 日韩亚洲视频| 91久久综合| 亚洲人人精品| 亚洲精品视频啊美女在线直播| 国产精品久久7| 欧美日韩一区二区三区四区在线观看 | 亚洲视频欧美在线| 牛牛国产精品| 欧美另类专区| 亚洲视频碰碰| 在线国产日韩| 99国产精品99久久久久久粉嫩| 在线观看不卡| 一本久久综合| 小嫩嫩精品导航| 老牛国产精品一区的观看方式| 久久精品日产第一区二区三区| 男人的天堂成人在线| 久久久www免费人成黑人精品| 久久久久久国产精品mv| 欧美黄免费看| 国产在线精品二区| 91久久精品一区二区别| 国产日韩一区二区| 久久裸体视频| 欧美三区美女| 日韩视频在线一区二区三区| 国产精品久久777777毛茸茸| 久久国产手机看片| 国产精品v日韩精品v欧美精品网站| 国内成人在线| 国产一区二区你懂的| 久久国产一区二区| 黄色精品网站| 中文亚洲欧美| 欧美大片一区| 在线亚洲欧美| 欧美日韩视频在线一区二区观看视频 | 国产午夜精品在线| 久久激情综合| 亚洲一级电影| 麻豆成人精品| 亚洲国产高清视频| 麻豆精品视频| 在线播放不卡| 久久精品官网| 夜夜嗨一区二区| 欧美搞黄网站| 国产精品免费在线| 欧美日韩网站| 亚洲一区二区免费看| 欧美日本一区二区视频在线观看| 美女91精品| 国产精品五区| 欧美激情1区2区| 国产精品日韩高清| 红桃视频国产精品| 久久亚裔精品欧美| 亚洲免费一区二区| 韩国精品一区二区三区| 亚洲欧美日韩另类精品一区二区三区 | 一本色道久久综合亚洲精品不 | 久久国产精品久久精品国产| 在线成人h网| 午夜久久美女| 国产精品日韩一区二区| 亚洲福利精品| 狠狠色噜噜狠狠狠狠色吗综合| 一区二区欧美日韩| 黄色一区二区三区四区| 老司机午夜免费精品视频| 国产日韩一区二区三区在线播放| 亚洲国产电影| 欧美日韩一区在线播放| 美女91精品| 先锋影音久久久| 亚洲永久免费| 亚洲影音一区| 久久国产精品一区二区三区| 亚洲一区二区三区高清| 国产一区二区三区免费不卡| 日韩视频在线播放| 99精品热6080yy久久| 99国产精品99久久久久久粉嫩| 亚洲大胆av| 亚洲精品字幕| 在线视频精品一区| 国产日韩一区欧美| 亚洲中字黄色| 久久五月天婷婷| 欧美一区三区二区在线观看| 午夜电影亚洲| 狠狠爱综合网| 亚洲三级色网| 亚洲一区二区成人| 久久av最新网址| 欧美成人中文| 黄色在线一区| 国产一区二区高清| 久久久久91| 国产精品a级| 夜夜爽99久久国产综合精品女不卡| 一区二区国产在线观看| 午夜影院日韩| 欧美区日韩区| 99国产精品久久久久久久 | 国产精品一区毛片| 久久性色av| 黄色亚洲精品| 性色一区二区| 韩国久久久久| 亚洲永久免费精品| 欧美亚洲不卡| 国产精品乱码| 欧美午夜一区二区福利视频| 亚洲精品在线免费| 久久中文字幕一区二区三区| 亚洲一级二级| 久久精品日韩欧美| 在线视频观看日韩| 免费在线成人av| 国产一区二区在线观看免费播放| 亚洲人久久久| 欧美激情1区2区3区| 一本久道久久综合狠狠爱| 欧美一区免费视频| 亚洲深爱激情| 激情欧美日韩一区| 久久高清国产| 亚洲日本视频| 国产综合自拍| 蘑菇福利视频一区播放| 亚洲三级电影在线观看| 欧美激情aⅴ一区二区三区| 国产欧美一区二区色老头| 欧美日韩三级电影在线| 欧美亚洲在线| 亚洲裸体俱乐部裸体舞表演av| 欧美激情一区| 久久九九电影| 亚洲一区影院| 国产欧美日韩一级| 在线免费观看一区二区三区| 欧美日韩免费| 欧美精品播放| 老司机午夜精品视频| 亚洲欧美成人综合| 国产日韩综合| 一区二区黄色| 国产日韩欧美一区二区| 亚洲久久一区| 亚洲久久一区| 99精品欧美| aa级大片欧美三级| 亚洲精品一区二区三区樱花| 精品91视频| 最新日韩av| 亚洲看片网站| 亚洲视频www| 国产欧美一区二区三区另类精品 | 久久久国产精品一区二区三区| 国产精品手机在线| 国产一区二区三区的电影 | 美日韩免费视频| 久久久久久一区| 久久亚洲午夜电影| 老司机精品福利视频| 欧美日本久久| 激情偷拍久久| 一区二区三区福利| 国产亚洲第一区| 午夜在线a亚洲v天堂网2018| 久久久综合网| 欧美日韩精品一本二本三本| 国内成人在线| 99国产精品久久久久久久| 国产精品久久久久毛片大屁完整版| 国产欧美日韩亚洲一区二区三区| 一区二区三区国产盗摄| 亚洲一区不卡| 欧美日韩一区二区三| 亚洲精品日韩久久| 小嫩嫩精品导航| 欧美日韩另类丝袜其他| 日韩午夜视频在线观看| 久久精品中文| 亚洲福利精品| 久久免费99精品久久久久久| 亚洲午夜精品国产| 亚洲一区二区三区高清| 欧美久色视频| 亚洲国产精品综合| 久久av免费一区| 伊人色综合久久天天五月婷| 国产精品一页| 欧美区一区二| 国产情侣一区| 欧美视频久久| 先锋影音久久| 亚洲人成人一区二区三区| 蜜桃视频一区| 亚洲三级影院| 欧美体内she精视频在线观看| 99热这里只有精品8| 午夜精品剧场| 欧美中文字幕| 亚洲麻豆视频| 国内外成人免费视频| 男人天堂欧美日韩| 亚洲国产精品毛片| 欧美日韩视频| 久久aⅴ国产紧身牛仔裤| 亚洲激情啪啪| 国模一区二区三区| 久久久夜夜夜| 国产精品一级久久久| 在线精品观看| 国产精品播放| 欧美日本久久| 久久字幕精品一区| 免费不卡亚洲欧美| 国产日产高清欧美一区二区三区|