龙芯俱乐部开源技术社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 7948|回复: 4

智龙V2通过I2C连接DS3231时钟模块

[复制链接]

5

主题

11

帖子

478

积分

中级会员

Rank: 3Rank: 3

积分
478
发表于 2015-10-30 16:14:59 | 显示全部楼层 |阅读模式
DS3231高精度I2C实时时钟。为了学习智龙V2和龙芯1C的使用,开发了ds3231的驱动。

接线方式:使用现成的ds3231模块,芯片和电阻都焊好了,用面包板线接出来。智龙接口是排针不能直接
插面包板线,简陋地焊了几个母接口。
智龙Vcc =====  DS3231+
智龙GND =====  DS3231-
智龙GPIO50 ====  ds3231 SDA
智龙GPIO51 ====  ds3231 SCL

我们使用是的1c芯片的I2C-2,I2C_SDA2和I2C_SCL2需要和GPIO50 GPIO51复用。
必须将GPIO50 GPIO51的复用四打开才行,否则不会工作的。详见程序。

驱动的开发:
platform.c的开发:
修改ls1c/platform.c,增加

static struct i2c_board_info __initdata ls1x_i2c1_devs[] = {
        //===========define I2C ds3231
        {
                I2C_BOARD_INFO("ds3231", 0x68),
        },
};
因为ds3231的读写地址是0B1101000+(R/W),取前7位为0x68。


将ds3231挂到I2C总线2上。
i2c_register_board_info(2, ls1x_i2c1_devs, ARRAY_SIZE(ls1x_i2c1_devs));
第一个参数2表示第2个I2C总线。
platform.c就开发完了,编译内核,pmon安装内核。reboot。

ds3231.c的开发

模块初始函数调用i2c_add_driver。系统会调用ds3231_probe探测函数。
因为使用了gpio50 51的复用四,一定要有下面两行。
        //打开第四复用gpio50 51,必须做
        __raw_writel(readl(LS1X_CBUS_FOURTHT1) |( 1 << (50 -  32)) ,LS1X_CBUS_FOURTHT1);
        __raw_writel(readl(LS1X_CBUS_FOURTHT1) |( 1 << (51 -  32)) ,LS1X_CBUS_FOURTHT1);

下面注册设备,生成sysfs。sysfs 的路径为
/sys/devices/platform/ls1x-i2c.2/ds3231class/ds3231。
生成了三个文件,文件date可以读写。读出为当前日期,如
/sys/devices/platform/ls1x-i2c.2/ds3231class/ds3231 # cat date
151030
设置日期方法为将年月日以yymmdd格式写入文件date,如echo 151030 > date

文件time可以读写,读出为当前时间
/sys/devices/platform/ls1x-i2c.2/ds3231class/ds3231 # cat time
155947
设置时间文件为写入时分秒,格式为hhmmss。如echo 160102 > time

文件register为只读,打印出19个寄存器。
/sys/devices/platform/ls1x-i2c.2/ds3231class/ds3231 # cat register
ds3231_recv start
[00]=0x14
[01]=0x07
[02]=0x16
[03]=0x05
[04]=0x30
[05]=0x10
[06]=0x15
[07]=0x00
[08]=0x00
[09]=0x00
[0a]=0x00
[0b]=0x00
[0c]=0x00
[0d]=0x00
[0e]=0x00
[0f]=0x88
[10]=0x00
[11]=0x1a
[12]=0x00



I2C实现方法调用系统函数i2c_master_send()和i2c_master_recv(),有详细文档没必要
再写说明了。

先做这么多如果需要读写其它寄存器用I2C调用很容易实现。

编译使用最简单的Makefile
obj-m := ds3231.o

编译命令
make -C  /内核安装路径/  M=`pwd` modules

生成ds3231.ko,tftp传到智龙2,命令insmod ds3231.ko

如果发现生成了目录/sys/devices/platform/ls1x-i2c.2/ds3231class/ds3231,就是成功了
对这个目录下的三个文件date time register读写可以读取和设置日期时间。
也可以用c语言或其它语言开发应用程序读写这些文件。


接线

接线

ds3231.rar

3.8 KB, 下载次数: 49, 下载积分: 经验值 2

程序

48

主题

257

帖子

4920

积分

新手上路

Rank: 1

积分
4920
发表于 2015-10-30 16:31:03 | 显示全部楼层
赞!

2

主题

13

帖子

469

积分

中级会员

Rank: 3Rank: 3

积分
469
发表于 2015-10-30 16:33:45 | 显示全部楼层
沙发没坐到~~~~~

0

主题

6

帖子

405

积分

中级会员

Rank: 3Rank: 3

积分
405
发表于 2016-11-16 14:19:39 | 显示全部楼层
很好 , 学习价值很高 !谢谢分享!

1

主题

6

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2017-3-4 15:09:21 | 显示全部楼层
楼主,请问i2c0引脚复用怎么接啊?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|龙芯俱乐部开源技术社区

GMT+8, 2024-4-19 14:51 , Processed in 0.125080 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表