RTC指實(shí)時(shí)時(shí)鐘,主要作用是為電子設(shè)備提供精準(zhǔn)的時(shí)間基準(zhǔn)。RTC分為兩類,片內(nèi)RTC和外部(掛)RTC。
? 內(nèi)部RTC
集成在芯片內(nèi)部,RTC模塊和時(shí)鐘配置系統(tǒng)一般處于后備區(qū)域,即在系統(tǒng)復(fù)位或從待機(jī)模式喚醒后,RTC的設(shè)置和時(shí)間維持不變。
? 外部RTC
獨(dú)立于主芯片的IC,也稱為時(shí)鐘芯片。通常使用獨(dú)立電源,一般為紐扣電池。在系統(tǒng)斷電后仍能自動(dòng)運(yùn)轉(zhuǎn),維系統(tǒng)更新實(shí)時(shí)時(shí)間。當(dāng)系統(tǒng)上電后,通過(guò)相應(yīng)的接口從外部RTC讀取當(dāng)前時(shí)間,用于同步系統(tǒng)時(shí)間。
本文介紹在基于MT76x8的Openwrt系統(tǒng)下增加外部RTC(EPSON,RX8010SJ)及相應(yīng)的驅(qū)動(dòng)支持。
一個(gè)基于I2C串行接口的系統(tǒng)實(shí)時(shí)時(shí)鐘模塊,內(nèi)部包含一個(gè)32.768的晶體振蕩器。提供包括但不限于秒、分、時(shí)、星期、日、月、年等時(shí)間基準(zhǔn)。
既然是基于I2C串行接口的模塊,那么第一步就需要在系統(tǒng)中添加I2C支持。
make menuconfig
Kernelmodules --->
I2Csupport --->
<*> kmod-i2c-core
<*> kmod-i2c-algo-bit
<*> kmod-i2c-gpio
<*> kmod-i2c-mt7628
Save && Exit.
make kernel_menuconfig
kernel_menuconfig
DeviceDrivers --->
<*> I2C support --->
<*> I2C device interface
I2CHardware Bus support --->
<*> Ralink I2C Controller
<*> MT7621/MT7628 I2C Controller
&i2c {
status = "okay";
};
同時(shí)需要注意I2C引腳是否作他用,如果另做他用,需要調(diào)整回來(lái)。
make manuconfig
menuconfig
Base system
Busybox
Miscellaneous Utilities --->
[*] i2cget (5.5 kb)
[*] i2cset (6.7 kb)
[*] i2cdump (7.1 kb)
[*] i2cdetect (7.1 kb)
編譯&& 下載到目標(biāo)板。
經(jīng)過(guò)以上步驟,已經(jīng)完成了I2C驅(qū)動(dòng)支持,至此已經(jīng)可以在/dev下看到i2c-0的節(jié)點(diǎn)。并且可用通過(guò)代碼或者指令訪問(wèn)EPSON RX8010SJ芯片,進(jìn)行簡(jiǎn)單的設(shè)置和讀取時(shí)間。
查看I2C設(shè)備:
查看時(shí)間寄存器:
但這種使用非常復(fù)雜,接下來(lái)需要添加EPSONRX8010SJ相關(guān)的驅(qū)動(dòng),以便使用hwclock更簡(jiǎn)單的訪問(wèn)時(shí)鐘芯片。
Make kernel_menuconfig增加內(nèi)核對(duì)RTC模塊的支持
kernel_menucofig
Device Drivers
Real Time Clock
---Real Time Clock
[*] Set the RTC time based on NTP synchronization
[*]/sys/class/rtc/rtcN(sysfs)
[*] /proc/driver/rtc (procfs for rtcN)
[*] /dev/rtcN (character devices)
<*> Epson RX8010SJ
Save && Exit.
&i2c {
status = "okay";
rtc@32 {
compatible = "epson,rx8010";
reg = <0x32>;
};
};
其中0x32為EPSON RX8010SJ的I2C從機(jī)地址,而compatible字段,參考:內(nèi)核/driver/rtc/rtc-rx8010.c如下:
static const struct of_device_id rx8010_of_match[] = {
{ .compatible = "epson,rx8010" },
{ }
};
編譯&& 下載到目標(biāo)板。
通過(guò) hwclock指令操作。
在使用hwclock時(shí)可能會(huì)出現(xiàn)如下錯(cuò)誤:
造成以上問(wèn)題,可能是RTC芯片剛上電時(shí),內(nèi)部時(shí)間非法,及通過(guò)驅(qū)動(dòng)讀取到非法時(shí)間,導(dǎo)致調(diào)用驅(qū)動(dòng)時(shí)傳入?yún)?shù)報(bào)錯(cuò)。
此時(shí)需要通過(guò)寫入方式,將EPSON RX8010SJ內(nèi)部寄存器改為合法值,即將實(shí)時(shí)時(shí)鐘更新為系統(tǒng)時(shí)間。
再次通過(guò)hwclock指令讀取RTC時(shí)間,即可成功讀取到RTC(EPSON RX8010SJ)時(shí)間,如下圖:
當(dāng)需要使用RTC更新系統(tǒng)時(shí)鐘時(shí),即可簡(jiǎn)單的使用指令:hwclock -s。執(zhí)行完此指令后,可通過(guò)date指令查看當(dāng)前系統(tǒng)時(shí)間。
今天的分享就到這里啦,EBYTE每一天都致力于更好的助力物聯(lián)化、智能化、自動(dòng)化的發(fā)展,提升資源利用率,更多無(wú)線射頻模塊和無(wú)線通信技術(shù)資料,感興趣的小伙伴可以登錄我們的億佰特官網(wǎng)進(jìn)行了解,也可以直接撥打400電話咨詢技術(shù)專員!
相關(guān)閱讀:
7 X 24 銷售服務(wù)熱線
4000-330-990深圳辦事處柯經(jīng)理:18218726658 南京辦事處葛經(jīng)理:17626012283
無(wú)錫辦事處劉經(jīng)理:13558641933
成都總部銷售經(jīng)理:
秦 科(無(wú)線模塊):18884314654 馮子恒(無(wú)線模塊):18828049434
蔡友銀(無(wú)線模塊):13882211021 葛宇龍(通信設(shè)備):19138800613
胡兵(外貿(mào)銷售經(jīng)理):18584911141、 sales06@ebyte.com
業(yè)務(wù)郵箱:support@cdebyte.com 全國(guó)銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號(hào)B5棟(前臺(tái)座機(jī):028-61543675)
?? 成都億佰特電子科技有限公司【版權(quán)所有】 蜀ICP備13019384號(hào)