CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 5585|回复: 0

为CB2加硬件RTC

[复制链接]
发表于 2014-8-16 20:08:58 | 显示全部楼层 |阅读模式
本帖最后由 XKP 于 2014-8-26 16:34 编辑

做了一块CB2的扩展板,见帖子:http://forum.cubietech.com/forum.php?mod=viewthread&tid=3185&extra=page%3D1里面有电路图,可以下载。
扩展板上有一个硬件RTC,下面为我自己的操作来读取时间数据
我使用的是cubain镜像,下载地址:http://cn.cubian.org/downloads/
安装以下工具:
apt-get install i2c-tools
对于i2c-tools工具的使用可以在网上查询一下,很多资料
因为RTC是使用DS1307,使用的I2C总线

一、I2C设备查询
    若总线上挂载I2C从设备,可通过i2cdetect扫描某个I2C总线上的所有设备。可通过控制台输入i2cdetect -y 1,结果如下所示。
如果接线正确一般会出现(看68就好了)
1.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
2. 00:          -- -- -- -- -- -- -- -- -- ---- -- --
3. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
4. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
5. 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
6. 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
7. 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
8. 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
9. 70: -- -- -- -- -- -- -- --

说明1:-y为一个可选参数,如果有-y参数的存在则会有一个用户交互过程,意思是希望用户停止使用该I2C总线。如果写入该参数,则没有这个交互过程,一般该参数在脚本中使用。
说明2:此处I2C总线共挂载一个设备——DS1307,从机地址0x68为DS1307


二、寄存器内容导出
通过i2cdump指令可导出I2C设备中的所有寄存器内容,例如输入i2cdump -y 1 0x68,可获得以下内容:


root@Cubian:/home/cubie#i2cdump -y 1 0x68
No size specified (usingbyte-data access)
     0 1  2  3 4  5  6 7  8  9 a  b  c d  e  f   0123456789abcdef
00: 14 31 16 04 14 08 14 03 8984 1a 20 02 00 00 04    ?1????????? ?..?
10: 09 08 88 00 2a 20 0c 4a 0081 30 02 10 00 05 00    ???.* ?J.?0??.?.
20: 00 08 4a 02 0a 28 48 88 0000 02 88 00 00 12 00    .?J??(H?..??..?.
30: 0a 01 48 04 c0 00 02 10 2000 11 04 a0 40 00 20    ??H??.?? .???@.
40: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
50: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
80: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
90: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
a0: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
b0: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
c0: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
d0: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
e0: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
f0: 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00    ................
root@Cubian:/home/cubie#

主要看前面的00~06地址的数据,对应的含义请下载DS1307的数据手册查看(这个我已经修改了,要是新的芯片,00地址上的数据为0x80,原因:00h  地址的第  7  位为器件时钟允许位(CH),此位为  1 则芯片未开始工作,即时钟未走时,所以在上电时单片机要先读出秒,并判断位  7(CH)是否为1,如为  1 要把该位清零写入秒寄存器(地址为  0 ), 并把其他的时间单元设定为默认值。  如果上电复位时读出的秒的最高位  CH  为  0,说明时钟已工作(前已对  CH清  0,且停电  后有备用电池),此时不能重写时间单元)

三、寄存器内容写入
    如果向I2C设备中写入某字节,可输入指令i2cset -y 1 0x68 0x00 0x01
    -y       代表曲线用户交互过程,直接执行指令
    1        代表I2C总线编号
    0x68   代表I2C设备地址,0x68为DS1307的地址
    0x00   代表存储器地址
    0x01  代表存储器地址中的具体内容

通过这个指令可以设置DS1307的时间数据

此扩展板上的RTC使用了超级电容为RTC供电保持数据,CB断电后RTC的时间数据也不会错误

这块扩展板我已做出一些,望大家支持,后期我还会继续深入开发

我还做了块继电器扩展板板型与CB1和CB2安装位相同,可以很容易安装到一起
继电器扩展板的链接:http://item.taobao.com/item.htm?spm=686.1000925.1000774.13.plrlo1&id=40680088523



评分

参与人数 2威望 +10 金钱 +5 贡献 +5 收起 理由
jerryli + 5 很给力!
dreamer2038 + 5 + 5 + 5

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-23 16:29 , Processed in 0.020401 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部