imx6ul——uboot添加RTC,pcf8563驱动

6 篇文章 0 订阅
2 篇文章 0 订阅

博主使用的是天嵌的imx6ul_coreB

一般来说uboot一开始是不支持RTC,可是有时需要在uboot上使用RTC,那么就记录一下如何添加RTC

 

1.添加RTC芯片配置相关

要添加RTC,首先在配置文件中添加宏开启pcf8563芯片的支持,以及RTC的设备地址等,使能date命令并设置RTC设备使用总线号。由于date命令是读取RTC内的时间,所以必须使用相关SOC自带rtc的驱动,或者板上的rtc芯片。具体根据板子情况来决定,TQIMX6UL_COREB使用底板上的rtc芯片。

进入配置文件在I2C configs处添加如下宏定义,添加过程如下:

#vi  include/configs/mx6ul_14x14_evk.h   

#define CONFIG_RTC_PCF8563 //开启RTC的配置

#define CONFIG_SYS_I2C_RTC_ADDR 0x51 //RTC设备地址

#define CONFIG_CMD_DATE //使能date命令

#define CONFIG_SYS_RTC_BUS_NUM 1 //RTC设备使用的总线号

 

2.编译pcf8563驱动

一般原厂的uboot会有各常用芯片的支持,如果没有则需要去网上下载后放入uboot源码。

将RTC文件编译,路径为drivers/rtc/pcf8563.c,确定8563.o编译进去,添加编译过程如下:

#vi drivers/rtc/Makefile

obj-$(CONFIG_RTC_PCF8563) += pcf8563.o //确定有这一条

 

3.配置I2C总线

uboot启动过程中会调用 setup_i2c 函数配置 i2c 总线,在board_init()添加I2C2的配置,board_init()路径为board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c,配置过程如下:

#vi  board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c

setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c_pad_info2); //添加配置I2C2总线

参考I2C1添加函数i2c_pad_info2,如下:

static struct i2c_pads_info i2c_pad_info2 = {

.scl = {

.i2c_mode =  MX6_PAD_CSI_HSYNC__I2C2_SCL | PC,

.gpio_mode = MX6_PAD_CSI_HSYNC__GPIO4_IO20 | PC,

.gp = IMX_GPIO_NR(4, 20),

},

.sda = {

.i2c_mode = MX6_PAD_CSI_VSYNC__I2C2_SDA | PC,

.gpio_mode = MX6_PAD_CSI_VSYNC__GPIO4_IO19 | PC,

.gp = IMX_GPIO_NR(4, 19),

},

};

管脚配置分析如下:

查看核心板原理图,查找I2C2,追溯到核心板,查看i2c2的SDA和SDL线,对应CSI_VSYNC和CSI_HSYNC,即是I2C2的配置管脚,如下图高亮:

打开arch/arm/include/asm/arch-mx6/mx6ul_pins.h查找CSI_VSYNC和CSI_HSYNC,对I2C2进行管脚配置,如下图灰色定义即是I2C2的管脚配置:

 

4.添加date命令

    实现drivers/rtc/pcf8563.c 这个文件,这个文件就相当于新建立date命令,打开pcf8563.c可以看到CONFIG_CMD_DATE这个配置,我们只需在配置文件mx6ul_14x14_evk.h 添加此配置即相当于新建了date命令,如图所示:

date命令则由cmd/date.c实现,我们需要在配置文件mx6ul_14x14_evk.h中配置正确的I2C总线号,具体实现过程可查看源代码,分析如下:

do_date()

  (1) 定义一个rtc_time <include/rtc.h>的结构体

  (2) 设置正确的i2c总线。(对于使用片上rtc,此处始终返回为0)

  (3) 判断date命令的参数个数。

     如果是一个,则是显示时间,调用rtc_get函数。如果读取失败,则显示错误信息后退出。

     如果是两个,则进一步判断。

        如果是reset,则输出“Reset RTC..."后,调用rtc_reset函数。

        如果不是reset,首先调用ret_get函数获取时间,如果正确,则通过mk_date将date命令的参数转换为rtc_time结构体。最后调用rtc_set函数。

在u-boot中,实现rtc的驱动,只要实现rtc_get, rtc_reset, rtc_set函数即可。

 

5.date命令使用

由于在uboot中添加总线的总线为1,所以在执行命令时需要切换到I2C2(I2C总线从0开始配置,0为I2C1,1为I2C2),date命令不带参数,即为读取rtc时间,并显示成我们可读的格式。date命令带参数,用于设置rtc的时间。

进入uboot命令行,使用如下:

#i2c dev 1 //切换到i2c2总线

#i2c probe //探测该总线下的设备,可以在driver中找到pcf8563的address 0x51

#date reset //复位rtc芯片

#date //读取rtc时间

#date 0719225018 //设置时间 月 日 时 分 年  20180719 22:50

命令使用读取设置时间成功即表示uboot添加RTC成功:

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世黎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值