S3C2440 Linux驱动移植——AT24C02(EEPROM)驱动

发布者:science56最新更新时间:2017-09-23 来源: eefocus关键字:S3C2440  Linux驱动  移植  AT24C02  EEPROM 手机看文章 扫描二维码
随时随地手机看文章

开发板:TQ2440

内核:Linux 2.6.32

PC OS:Ubuntu 11.04


1.配置内核

打开I2C功能:



打开杂项设备,该选项打开后,EEPROM也就打开了。

 

 

2. 修改代码



修改文件: linux/arch/arm/mach-s3c2440/mach-smdk2440.c

增加如下代码片段:


  1. #include   

  2. static struct at24_platform_data at24c02 = {  

  3.     .byte_len   = SZ_2K / 8,  

  4.     .page_size  = 8,  

  5.     .flags      = 0,  

  6. };  

  7.   

  8. static struct i2c_board_info __initdata smdk_i2c_devices[] = {  

  9.     /* more devices can be added using expansion connectors */  

  10.     {  

  11.         I2C_BOARD_INFO("24c02", 0x50),  

  12.         .platform_data = &at24c02,  

  13.     },  

  14. };  



在smdk2440_machine_init函数中增加如下:



  1. i2c_register_board_info(0, smdk_i2c_devices, ARRAY_SIZE(smdk_i2c_devices));  


注意:上面许多参数是根据at24c02的参数来设置的,at24c02使用8位地址,内存大小2K比特位,也就是256K字节,页大小为8字节。

最后,需要注意,手册中at24c02的设备地址是0b 1 0 1 0 0 0 0 R/W, 其最低位是读写标志位,

但是在Linux中,I2C设备地址的最高位为0,而低七位地址就是手册中去掉R/W的剩余7位。因此,地址为0b 01010000(0x50)

3. 测试代码

       系统启动后,如果一切正常。会在/sys文件系统下展示出该设备,如下:

 

[root@yj4230-0050]#pwd

/sys/devices/platform/s3c2440-i2c/i2c-0/0-0050

[root@yj4230-0050]#ls

bus        eeprom     name      subsystem

driver     modalias  power      uevent

[root@yj4230-0050]#cat name

24c02

 

其中eeprom即为驱动导出的bin属性,通过读写eeprom即可访问设备,如下:

 

[root@yj4230-0050]#cat eeprom

i2ci2c-0: master_xfer[0] W, addr=0x50, len=1

i2ci2c-0: master_xfer[1] R, addr=0x50, len=128

i2ci2c-0: master_xfer[0] W, addr=0x50, len=1

i2ci2c-0: master_xfer[1] R, addr=0x50, len=128

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬

 

接着,编写代码进行测试,如下:


  1. #include   

  2. #include   

  3. #include   

  4. #include   

  5. #include   

  6. #include   

  7. #include   

  8.   

  9. int main(int argc, char **argv)  

  10. {  

  11.     int ret, fd, i, j;  

  12.     char read_data[256];  

  13.     char write_data[256];  

  14.     char offset;  

  15.       

  16.     fd = open("/sys/devices/platform/s3c2440-i2c/i2c-0/0-0050/eeprom", O_RDWR);  

  17.     if(fd < 0){  

  18.         printf("Open at24c02 fail\n");  

  19.         return -1;  

  20.     }  

  21.       

  22.     ret = read(fd, &offset, 1);  

  23.     if(ret < 0){  

  24.         printf("Read error\n");  

  25.         return -1;  

  26.     }else if(ret < 1){  

  27.         perror("Incomplete read\n");  

  28.         printf("%d\n", ret);  

  29.         return -1;  

  30.     }  

  31.       

  32.     for(i = 0; i < 256; i++)  

  33.         write_data[i] = offset+ 1 + i;  

  34.       

  35.     lseek(fd, 0 , SEEK_SET);        //It's a must, or something wierd will happen  

  36.       

  37.     ret = write(fd, write_data, 256);  

  38.     if(ret < 0){  

  39.         printf("Write error\n");  

  40.         return -1;  

  41.     }  

  42.       

  43.     lseek(fd, 0 , SEEK_SET);     //It's a must, or something wierd will happen  

  44.       

  45.     ret = read(fd, read_data, 256);  

  46.     if(ret < 0){  

  47.         printf("Read error\n");  

  48.         return -1;  

  49.     }else if(ret < 256){  

  50.         perror("Incomplete read\n");  

  51.         printf("%d\n", ret);  

  52.         return -1;  

  53.     }  

  54.       

  55.     for(i = 0; i < 256; i++){  

  56.         if(i %16 == 0)  

  57.             printf("\n");  

  58.         printf(" %03d ", read_data[i]);  

  59.   

  60.     }     

  61.     printf("\n");                     

  62. }  


代码结果如下:

 


关键字:S3C2440  Linux驱动  移植  AT24C02  EEPROM 引用地址:S3C2440 Linux驱动移植——AT24C02(EEPROM)驱动

上一篇:S3C2440 Linux驱动移植——SD卡驱动
下一篇:S3C2440挂载NFS根文件系统

推荐阅读最新更新时间:2024-03-16 15:38

linux2.6.18内核S3C2410平台移植笔记
我使用的实验箱是Embest EDUKIT-III,板上资源CPU:SAMSUNG S3C2410A、FLASH:K9F5608U0(Samsung NAND 32MiB),烧录工具:embest flash programmer。因为厂家自带的是2.4的内核,目前学习开发用的基本上都是2.6内核,这两者改动还是比较大的。电话咨询过技术支持后,对方说只想在板子上跑系统的话还是比较好移植的。于是决心自己动手移植内核。不然今后的驱动编写,都没有合适的运行环境,影响进度。所以工欲善其事,必先 利其器,前期的这些准备还是很有必要的。那几天刚好ubuntu10.10发布,满怀期待的我升完级后,结果悲剧了,中文显示变得发虚模糊,主题颜色也极度
[单片机]
51单片机学习:I2C-EEPROM实验
实验名称:I2C-EEPROM实验 接线说明: 实验现象:下载程序后,数码管右4位显示0,按K1键将数据写入到EEPROM内保存, 按K2键读取EEPROM内保存的数据,按K3键显示数据加1,按K4键显示数据清零, 最大能写入的数据是255。 注意事项: ***************************************************************************************/ #include public.h #include 24c02.h #include key.h #include smg.h #define EEPROM_ADDRESS 0 //定义数据存入EEP
[单片机]
友善之臂Mini2440之嵌入式Linux下Nand Flash驱动分析
一、Nand Flash驱动源码文件含义 在Linux内核中,MTD源代码放在/driver/mtd目录下,该目录中包含chips、devices、maps、nand、onenand和ubi六个子目录。其中只有nand和onenand目录中的代码才与Nand驱动有关,nand目录中的代码比较通用,而onenand目录中的代码相对于nand中的代码而言简化了许多,是三星公司开发的另类nand Flash。市场占有率不是很高。所以,开发基于MTD的nand驱动程序,基本上只需要关注nand目录了,包括Kconfig、Makefile以及如下重要文件: 1、nand_base.c 定义了Nand驱动中对nand芯片最基本的操
[单片机]
S3C2440—7.存储控制器访问外设
一.内存接口的概念 S3C2440是SOC,所以会有很多外设,一般驱动外设的方法可以分为: 通过CPU访问相应的的寄存器,然后通过控制器驱动外设 CPU直接访问外设地址,驱动外设 后一种访问方式是CPU直接对内存地址的访问,即通过内存接口访问外设,CPU通过片选线选定外设,通过地址线先选定地址,通过数据线进行控制。 我们称这种外设为内存类设备,通常有:NOR FLASH、网卡、SDRAM…… 那CPU是如何通过这些总线来驱动内存类设备呢?这就涉及到存储控制器了,下面就来介绍一下存储控制器的原理。 二.存储控制器(内存控制器) 2.1 什么是存储控制器? 存储控制器是按照一定的时序规则对存储器的访问进行必要控制的
[单片机]
<font color='red'>S3C2440</font>—7.存储控制器访问外设
s3c2440 移值u-boot-2016.03 第3篇 支持Nor flash 识别
当选择,NOR flash 启用时,才可以访问 NOR FLASH 。 /common/board_r.c 364 line: initr_flash() flash_size = flash_init(); /drivers/mtd/cfi_flash.c 想要打开调试的话, 就定义这个 #define DEBUG flash_init() debug( JEDEC PROBE: ID %x %x %xn , info- manufacturer_id, info- device_id, info- device_id2); if (jedec_flash_match(info, info- start )) break; /d
[单片机]
<font color='red'>s3c2440</font> 移值u-boot-2016.03 第3篇 支持Nor flash 识别
一种可移植的嵌入式图形支持系统:MiniGUI
  为目标嵌入式产品选择适合的嵌入式图形支持系统成为与选择嵌入式操作系统一样颇具挑战性。本土公司开发的MiniGUI是一个高效、可靠、可定制、小巧灵活的图形用户界面支持系统,并具有跨硬件平台、跨操作系统的可移植性,非常适合于实时嵌入式产品开发。本文详细阐述了MiniGUI的特点、运行模式和应用。      随着高端消费类电子产品(PDA、手机等)的广泛应用,原先仅在军工、工业控制等领域中使用的实时嵌入式操作系统,受到越来越多的关注。因为嵌入式产品本身是一种高度定制化的软硬件集成产品,单个操作系统无法满足各类嵌入式产品的多样化需求,因此,业界有许多各具特色的实时嵌入式操作系统产品可供选择。      在嵌入式产品开发中,除操作系统之
[手机便携]
一种可<font color='red'>移植</font>的嵌入式图形支持系统:MiniGUI
stm32固件库在stm3210e-eval开发板上的移植
  首先建立工程,我习惯性在工程文件夹下建立以下几个文件夹,分别放不同的文件,以区别不同文件的不同作用,方便寻找和移植。如下:      在PROJECT文件夹下建立工程项目,启动keil,开始建立工程。      注意建立在PROJECT文件夹下。      随便起个名字,我起的名字是MDK,建立后,会提示你选择器件型号         我的器件如上图,所以选择。确定后会询问你是否加入启动文件。我们用stm32的固件库,所以不用mdk的,选择否。      下面配置工程的选项option,右键点Target会看到Options。      以下是各个选项卡的配置内容。      
[单片机]
stm32固件库在stm3210e-eval开发板上的<font color='red'>移植</font>
U-Boot在基于ADSP BF533的嵌入式Linux系统上的移植
1 引言 Boot Loader(内核引导程序)是在操作系统内核运行之前运行的一段自举程序,用于初始化硬件设备、改变处理器运行模式、重组中断向量和建立内存空间映射图,从而将系统的软硬件带到一个合适的状态或者用户定制的特定状态,以便为最终加载操作系统内核准备好正确的环境 。 嵌入式Linux系统常用的Boot Loader有arm-boot、redboot、U-Boot等。U-Boot (全称Universal Boot Loader)是当前比较流行的遵循GPL条件的开放源码项目。U-Boot具有源码公开的特点,开发人员可根据自身需要进行裁减;支持多种处理器和嵌入式操作系统内核;具有多种设备驱动源码:支持种引导方式;具有功能强大
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved