AT24C02及DS18B20的支持

一、AT24C02的驱动支持

Linux系统本身就支持I2C的驱动,下面就来看一下,在Linux下如何通过I2C总线访问AT24C02芯片。
先运行命令“make menuconfig”打开内核配置对话框,然后勾选Device Drivers->I2Csupport项,再勾选Device Drivers->Misc devices->EEPROM support->I2C EEPORMs from most vendors项。这样配置后,内核就支持I2C总线和EEPROM器件了。
接下来需要修改文件arch/arm/mach-s3c24xx/mach-smdk2416.c,用vi打开它,先在包含头文件部分加入一句“#include < linux/i2c/at24.h >”,把AT24C02芯片的头文件包含进来。然后找到结构体“static struct platform_device *smdk2416_devices[] __initdata”定义这一句,在此句前加入几个空行,然后输入下面的内容(注:不是插入在结构体内,是插在结构体之前!):
static struct at24_platform_data at24c02 = {
.byte_len = SZ_2K / 8,
.page_size = 8,
.flags = 0,
};
static struct i2c_board_info __initdata smdk_i2c_devices[] = {
{
I2C_BOARD_INFO("24c02", 0x50),
.platform_data = &at24c02,
},
};
添加完成后,在刚才找到的结构体内,相看是否有一句“&s3c_device_i2c0,”,如果没有需要添加这一句,以向内核注册I2C总线驱动。
上面添加的参数是根据AT24C02来确定的,使用8位地址,内存大小为2K比特位,页大小为8字节,如果换用其它芯片需要酌情进行修改。另外还需要说明的是,AT24C02的设备地址是0b1010000R/W,其最低位是读写标志位,但在Linux中,I2C设备地址的最高位为0,而低七位地址就则是去掉R/W的剩余7位。所以AT24C02在Linux中的地址为0b01010000(0x50)。
接下来再往下查找,找到设备初始化函数“static void __init smdk2416_machine_init(void)”,并在其中合适的位置(可放在最后一句smdk_machine_init();之前)增加下面一句:
i2c_register_board_info(0, smdk_i2c_devices, ARRAY_SIZE(smdk_i2c_devices));
完成后存盘退出,然后重新编译整个Linux内核,生成的内核就能够支持I2C总线的AT24C02芯片了。把编译好的内核写入开发板,确保开发板上的AT24C02已连接好,启动开发板,进入/sys/devices/platform/s3c2410-i2c/i2c-0目录下,正常的话可看到一个名为“0-0050”的目录,若没有这个目录很可能是AT24C02没接好或没上电。可看到其实该目录的名称就是AT24C02的地址。进入该目录,可看到一个名为“eeprom”的设备文件,写这个文件可把信息存入AT24C02中(如执行echo “hello” > eeprom),读取这个文件可获得AT24C02中存储的内容(如执行cat eeprom),如下图所示。保存在AT24C02中的内容掉电不会消失,并且它的读写可按字节,其寿命也要大于传统的NAND FLASH。

二、DS18B20的驱动支持

Linux系统本身就支持Dallas公司的单总线(1-wire)设备驱动,下面就来看一下,在Linux下如何通过单总线访问DS18B20测试传感器。
Linux内核的Dallas单总线设备驱动在/drivers/w1目录下,分为Master和Slave两种模式。Master目录下为主控制器驱动,这里使用w1-gpio.c,它是单总线的I/O操作方法,用于模拟单总线时序;Slave目录下是从设备驱动,由于DS18B20属于温度传感器,所以这里使用w1_therm.c,它负责操作DS18B20内部寄存器的读写。
先运行命令“make menuconfig”打开内核配置对话框,然后勾选Device Drivers->Dallas’s 1-wire support项,再勾选Device Drivers->Dallas’s 1-wire support->1-wire Bus Masters->GPIO 1-wire busmaster项和Device Drivers->Dallas’s 1-wire support->1-wire Slaves->Thermal family implementation项。这样配置后,内核就支持DS18B20器件了。
接下来需要修改文件arch/arm/mach-s3c24xx/mach-smdk2416.c,用vi打开它,先在包含头文件部分加入一句“#include < linux/w1-gpio.h >”,把单总线设备的头文件包含进来。然后找到结构体“static struct platform_device *smdk2416_devices[] __initdata”定义这一句,在此句前输入下面的内容(注意事项和前面一样):
static void w1_enable_external_pullup(int enable)
{
if (enable)
s3c_gpio_setpull(S3C2410_GPB(5), S3C_GPIO_PULL_UP);
else
s3c_gpio_setpull(S3C2410_GPB(5), S3C_GPIO_PULL_NONE);
}
static struct w1_gpio_platform_data ds18b20_w1_gpio = {
.pin = S3C2410_GPB(5),
.is_open_drain = 0,
.enable_external_pullup = w1_enable_external_pullup,
};
static struct platform_device s3c_device_ds18b20 = {
.name = "w1-gpio",
.id = -1,
.dev = { .platform_data = &ds18b20_w1_gpio, },
};
注意,上述默认DS18B20是接在引脚GPB5上的,若接在其它引脚上,上述代码中的S3C2410后面的值要依据实际的引脚来进行更改。另外,设备名称“w1-gpio”要与w1-gpio.c驱动中的驱动名称一致,这样才能向内核注册这个设备驱动。
添加完成后,在刚才找到的结构体内,添加一句“&s3c_device_ds18b20,”,以向内核注册DS18B20芯片驱动。
完成后存盘退出,然后重新编译整个Linux内核,生成的内核就能够支持单总线的DS18B20芯片了。把编译好的内核写入开发板,然后在开发板上接好DS18B20传感器,启动开发板,进入/sys/devices目录下,正常的话可看到一个名为“w1_bus_master1”的目录,若没有这个目录很可能是DS18B20没接好或没上电。进入该目录,可看到一个以“28-”开头的目录,这就是当前DS18B20传感器的主目录,其目录名称的后面为该片DS18B20的ID号,若有多片DS18B20会有多个这样的目录。进到该目录下,会看到一个名为“w1_slave”的设备文件,读取这个文件就可获得温度及设备的相关信息(可执行cat w1_slave),如下图所示。其中“t=”后面的数字就是测得的当前温度,要在千位的后面加上小数点,图中的温度为17.625摄氏度。

原文地址:https://www.cnblogs.com/fxzq/p/12275272.html

时间: 2024-11-13 09:00:58

AT24C02及DS18B20的支持的相关文章

基于Android平台的i-jetty网站智能农业监控系统

基于android平台i-jetty网站的智能农业监控系统 摘要:传统的监控系统,一般是基于PC的有线通信传输,其有很多不足之处,如功耗较高.布线成本高.难度大,适应性差,可扩展性不强,增加新的通信线路需要再次布线施工,而且维护起来也比较麻烦,一旦线路出问题,需要繁琐的检查.而嵌入式Web监控系统是基于物联网技术,其无线通信技术具有成本低廉.适应性强.扩展性强.信息安全.使用维护简单等优点. 智能农业中,种植大棚是通过大棚内安装温湿度以及光照传感器,来对农作物的环境参数进行实时采集,由Web监控

【转】雄鹰计划-卓越工程师炼成记

原文网址:http://bbs.elecfans.com/jishu_400775_1_1.html 注意:雄鹰计划所有信息都将有朱兆祺ForARM进行实时更新,注意不良人士的骗局.这个计划全程免费.报名审核通过者凭借电子发烧友论坛用户名完成下面三项: 1.朱兆祺ForARM步步为营之单片机QQ群:110291944,凭借电子发烧友论坛用户名加入. 2.朱兆祺ForARM步步为营之单片机PCB领取,拍下时凭借电子发烧友论坛用户名领取: http://item.taobao.com/item.ht

28.Linux-IIC驱动(详解)

上一节 我们学习了: IIC接口下的24C02 驱动分析: http://www.cnblogs.com/lifexy/p/7793686.html 接下来本节, 学习Linux下如何利用linux下I2C驱动体系结构来操作24C02 1. I2C体系结构分析 1.1首先进入linux内核的driver/i2c目录下,如下图所示: 其中重要的文件介绍如下: 1)algos文件夹(algorithms) 里面保存I2C的通信方面的算法 2)busses文件夹 里面保存I2C总线驱动相关的文件,比如

视频直播的发展趋势分析

视频直播的分析与发展 在讲视频直播之前,先讲一讲直播.直播是怎么来的呢?从传播消息的角度上来说,视频和文字.图片.音乐一样都是传播消息的手段,古时以文字传播消息,之后出现了图片和音乐,再之后视频开始流行.出现这种演变的原因是什么呢?我想主要是由于读者的需求日益提高和传播技术的不断发展.读者不满足于当前的文字阅读,由此出现了图片与音乐,到后来图片与音乐也无法满足日益增长的需求,则出现了视频.视频具有文字.图片.音乐不具有的优势:传递的信息多,更让人有代入感,给观众更综合的体验.虽然视频有着无可比拟

I2C总线介绍及AT24C02驱动编写 笔记

中断处理程序 { 清除中断 硬件自动清除 软件清除 } CPU芯片手册相关章节 -------- I2C CPU外接设备的方式 1)GPIO简洁的方式(按键,LED) 通过设置GPIO管脚的状态来完成通信(控制) gpccon gpcpud gpcdat 2)类似于内存的接口 (DDRAM norflash nand dm9000) 从硬件上看CPU和芯片 数据线 地址先  BANK 3)协议类接口 uart I2C AT24C02    EEPROM 3,如何解决CPU和设备通信的问题 I2C

Cubieboard1显示DS18B20温度信息到LED

Cubieboard1的内核已经支持w1温度传感器DS18B20 (依赖的内核选项和模块包括dallas's 1-wire support, gpio_sunxi, w1_sunxi, w1_gpio, w1_slave_therm ). 下图的DIY是在8位8段LED显示模块上同时显示当前时间和气温的实验. jarry大侠在很久前的帖子(http://forum.cubietech.com/forum.php?mod=viewthread&tid=474)中介绍了DS18B20在cubiebo

【Espruino】NO.10 数字温度传感器DS18B20

http://blog.csdn.net/qwert1213131/article/details/28845147 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] [Espruino中文社区] DS18B20是很常用的数字温度传感器,供电范围为3.0V到5.5V,测温范围为-55~+125℃,在-10~+85℃范围内精度为+-0.5℃,每个器件都有唯一的64为序列号存储在内部存储器中,因此在一根总线上可以挂载多个器件,且独特的单线接口方式,使得DS18B20与微控制器连接

基于ARM-LINUX的温度传感器驱动(DS18B20) .

DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等.主要根据应用场合的不同而改变其外观.封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合.耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域. 技术性能描述 1. 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口

「雕爷学编程」Arduino动手做(39)——DS18B20温度传感器

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]108种传感器模块系列实验(资料+代码+图形+仿真) 实验三十九:DS18B20单总线数字温度传感器模块 DS18B20 是世界第一片支持"一线总线"接口的温度传感器,