单片机
返回首页

AT91RM9200+pcf8563在linux2.6.20下的调试心得

2020-02-26 来源:eefocus

这两天调试了AT91RM9200+pcf8563在linux2.6.20下的驱动,记录一下我的调试过程以及调试心得,呵呵


在linux2.6.20/drivers/rtc目录下面已经有了pcf8563的驱动程序,通过make menuconfig配置一下就可以了。


问题出来了“This chip cannot be reliably autodetected”这是源码中的注释,不能自动检测,实际上确实如此,怎么解决这个问题呢?google.....


搜索很久终于看到有个牛人的解决方法:


static unsigned short normal_i2c[] = { I2C_CLIENT_END };

修改为

static unsigned short normal_i2c[] = { 0x51,I2C_CLIENT_END };

增加pcf8563的设备地址,编译运行,内核终于找到pcf8563了,:)


你可以顺便看一下其他rtc的驱动,确实这个地方有个设备地址的,不知道为什么当时pcf8563不加这个地址,还写了那么一个注释,奇怪啊。。暂时不关心。继续。。。。


接下来就是系统时钟和硬件时钟同步的问题了,date用来设置系统时钟,hwclock用来同步系统时钟和硬件时钟,比如:


>date 2008.5.24-13:16:25    设置系统时间

>hwclock -w         把设置的时间,保存到rtc中


刚开始我的系统中没有hwclock命令,可以重新编译一下busybox,重新生成。

 

还有一个小问题,hwclock所操作的设备名是RTC,而pcf8563自动挂载的是rtc0。如果不解决这个问题,hwclock是没办法读写pcf8563的。


这有两个解决方法:

方法一:修改busybox的源码,把rtc全部修改为rtc0

方法二:>mknod /dev/rtc c 254 0

        >mknod /dev/rtc0 c 254 0


建立两个设备rtc 和 rtc0

 

最后写一个小的测试程序吧,呵呵

 

#include

#include

#include

#include

#include

#include

#include

#include

#include

 

int main(int argc, char **argv)

{

 int ret, fd;

 struct rtc_time rtc_tm;

 

 fd = open('/dev/rtc0', O_RDWR);

 if (fd < 0) {

  printf( 'Fail to open PCF8563!n' );

  exit(1);

 }

 

 ret=ioctl(fd, RTC_RD_TIME, &rtc_tm);

 if (ret < 0) {

  printf( 'Fail to read_time!n' );

 }

 printf('nnRead PCF8563 time is %d-%d-%d, %02d:%02d:%02d.n',rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);


 close(fd);

 return 0;

}


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章