通信人家园
标题:
AT91RM9200系列RTC芯片DS1307的应用小结
[查看完整版帖子]
[打印本页]
时间:
2010-5-10 20:57
作者:
ladeng777
标题:
AT91RM9200系列RTC芯片DS1307的应用小结
这几天在做RTC的应用,内核选择的是kernel2.6.20,gcc版本:3.4.1,选择的外围芯片是DS1307,电路参照datasheet。过程中遇到的问题如下:
1.对内核组成不熟,在RTC驱动选择中选择了:
导致内核打印
<7>at91_rtc at91_rtc: rtc intf: sysfs
<7>at91_rtc at91_rtc: rtc intf: proc
<7>at91_rtc at91_rtc: rtc intf: dev (254:0)
<6>at91_rtc at91_rtc: rtc core: registered at91_rtc as rtc0
<7>at91_rtc_readtime(): 1998-00-01 00:00:30
<6>at91_rtc at91_rtc: setting the system clock to 1998-01-01 00:00:30 (883612830)
如果如上选择:会出现<
7>i2c-core: driver [ds1307] registered
自己写RTC读写代码,对rtc0进行操作,编译运行发现:
时间正常读取和写入,也能够向后计时,
但是:无论是掉电重启、还是复位,时间都会消失,恢复到
<7>at91_rtc_readtime(): 1998-00-01 00:00:30
内核debug发现,根本就没走到DS1307.c中的函数,也就是说
registered at91_rtc as rtc0,只是对at91rm9200-rtc.c进行了操作,说明这是自带的RTC电路,跟CPU相关,操作相关寄存器即可对其控制。
去掉:
此时会注册ds1307为rtc0设备文件。过程发现
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
内核debug发现是
读取时间为-1、0等,导致判断month、mday范围出界,goto exit导致跳出,打不开即报上述错误。
DS1307 init!
i2c /dev entries driver
DS1307 detect!
DS1307 1!
DS1307 BCD!
DS1307 +0!
DS1307 min!+3
DS1307 3!
DS1307 ds_1307!
DS1307 attach client!
ds1307 0-0068: rtc core: registered ds1307 as rtc0
DS1307 register!
at91_i2c at91_i2c: AT91 i2c bus driver.
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
ds1307 0-0068: hctosys: invalid date/time
注释掉相关时间判断goto语句,最后运行如上。
不管这些错误,此时rtc0已经出现。(注意,如果regieter失败,是无法找到rtc0的)。
./rtc -r
2000.-1.00,-1,00:00:00
./rtc -w
2010.04.08,1,17:03:00
重启系统发现
ds1307 0-0068: setting the system clock to 2010-04-08 17:03:00 (1270746180)
时间掉电保护,但是没走
看datasheet可以看到CH影响计时器的使能,但是内核有判断,并置位为0,enable;
所以考虑可能是晶振没有起来,自然不会计时。首先是去测试上电、掉电的晶振频率,发现内核这边有32.768k左右的频率,但是外围RTC的晶振没有,尝试第二板也没有,换掉电容、晶振还是测试不出来。但是第三板是好的,两个地方都是32K左右,估计肯定行!果然,加上电池,效果出现了,掉电保护,并且正常计时。
另外一个问题就是使用示波器的知识:测试频率,最好打成10倍衰减档,不然32K测不出来
通信人家园 (https://www.txrjy.com/)
Powered by C114