Chinaunix首页 | 论坛 | 博客
  • 博客访问: 402539
  • 博文数量: 29
  • 博客积分: 2091
  • 博客等级: 大尉
  • 技术积分: 463
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-05 10:53
文章分类
文章存档

2012年(2)

2011年(6)

2010年(12)

2009年(9)

我的朋友

分类: LINUX

2009-11-20 12:27:23

我的项目用的是优龙AT9261核心板+自主开发的主板。系统用的是linux2.6.24。一开始用的是9261自带的RTC时钟,外接一后备电池。但发现9261自带时钟十分耗电,在使用CR1220电池供电时,大约只能维持一个星期左右电量即耗尽,因此决定改为DS1337C。用此芯片的原因主要是省电,内置晶振,使用方便,走时准确,且linux内核自带驱动。此芯片接口是i2c接口因此,重新配置内核,加开I2C选项,并打开其下的GPIO-based bitbanging I2C选项,以使用软件模拟的i2c接口。注意不能使用Atmel AT91 I2C Two-Wire interface (TWI)选项打开AT9261硬件i2C接口,因为硬件接口在linux下极不稳定。关闭realtime clock下的on cpu rtc driver。打开  Dallas/Maxim DS1307/37/38/39/40, ST M41T00选项,使用内核自带的DS1337驱动。重新编译内核,顺利通过,下载到板子上,重新系统,系统报告找到/dev/rtc。经过一翻努力,查找了很多资料,终于发现还要在板子初始化时,加入i2c的相关初化代码。在linux-2.6.24/arch/arm/mach-at91/board-sam9261ek.c中加入以下代码。

static struct i2c_board_info __initdata RTC_i2c_devices[] = {

       {

              I2C_BOARD_INFO("rtc-ds1307", 0x68),

              .type       = "ds1307",

       },

};

并将

static void __init ek_board_init(void)中的at91_add_device_i2c(NULL, 0);改为at91_add_device_i2c(RTC_i2c_devices, ARRAY_SIZE(RTC_i2c_devices));

重新编译,问题解决。

 

解决的方法很简单,摸索的过程很痛苦,在此把方法写出来,给有相同需求的朋友参考。
阅读(3276) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-05-27 09:46:01

你好,我也遇到类似问题,我的qq是527550224,向你请教个问题

chinaunix网友2010-05-27 09:45:33

你好,我也遇到类似问题,我的qq是52755.224,向你请教个问题