这次动手想给自己的BBB做一个RTCcape,让自己的板子可以每次开机记住时间。简单来说划分成三个任务:
1,搭建一个RTC硬件电路,这个有较多资料可以参考,比如官方的cape中就有http://elinux.org/CircuitCo:RTC_Cape。
2,需要一个设备树文件,既然是插上就能使用的cape,那么必须由设备树文件来绑定内核中和RTC硬件电路相对应的驱动程序,通过底层驱动外露出来的接口,我们的应用程序才能驱动硬件。
3,仅仅设备树文件还不能完成任务,还需写一个简单的脚本(这个就相当于我们的应用程序吧),让每次开机脚本自动把DS1338中的时间更新到系统时间。
第一步就是参考别人的硬件电路,然而抄完电路发现别人DS1338芯片的I2C接口是接在BBB的I2C1总线上,而我的电路却焊接到了I2C2总线上,于是有了这个修改设备树文件的变故。
注意此处的cape和通常所说的cape有一点点不一样,就是他没有用eeprom。通常对于cape的描述是一插上后板子上电就能用,这是因为位于0x54-0x57地址的eeprom告诉了系统启动时该对哪几个overlay进行重载,从而开机后系统就识别出了硬件。而这里没有eeprom的情况下,我通过修改uEnv.txt,让系统开机后就加载对应的dtbo文件,同样达到了这个目的。
从上面的链接把他配套的设备树文件下载过来,打开源码如下:
/*
* Copyright (C) 2013 Hieu Duong <me@hieuduong.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/
/dts-v1/;
/plugin/;
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black";
/* identification */
part-number = "BBB-RTC-01";
version = "00A1";
/* state the resources t