前言

原创文章,转载引用务必注明链接。水平有限,欢迎指正。

2016年3月30日 Lemuntu(Base On Jessie) 3.10.37

原载于Lemaker论坛。汇总于此。

看ATC2603C手册的时候发现其内置硬件时钟(Real Time Clock,RTC),并且提供alarm功能,用于把设备从低功耗状态唤醒。

7.2.5章节提到,PMU提供4种省电模式,且支持多种唤醒方式,包括按键、GPIO、RTC ALARM、红外线IR等,其中RTC ALARM可在S4深度睡眠状态唤醒设备。

查看原理图可知RTC只能从锂电池和DC电源取电,所以实用性有所下降。后期考虑加一个供电模块。

以前用树莓派的时候有想过如何自动开机,比如无线智能开关、红外控制器等,但是一直没有很好的方案。现在在Guitar上可以非常方便地实现。

不知道大家有没有看过《行尸走肉》,第一季里面瑞克给摩根一个无线电对讲机,告诉他每日几时会打开无线电通讯,而其他时候都处于省电状态。类似的,我们在野外给Guitar使用供电时,为了降低功耗,不需要让Guitar随时都处于开机状态。

好的,我们回到RTC上来。

什么是RTC

系统用两个时钟保存时间:硬件时钟和系统时钟。

硬件时钟(即实时时钟 RTC 或 CMOS 时钟)

仅能保存年、月、日、时、分、秒这些时间数值,无法保存时间标准(UTC 或 localtime)和是否使用夏令时调节。大家还记得1秒的定义吗:1967年召开的国际计量大会上,一秒钟被定义为铯原子的9192631770次固有微波振荡次数所需的时间,这一标准沿用至今。而硬件时钟原理类似,也是通过石英晶体振荡器频率工作,详情可以去看实时时钟的百度百科。特性是系统关闭后,只要供电就会持续计时。

系统时钟(即软件时间)

与硬件时间分别维护,保存了时间、时区和夏令时设置。Linux 内核保存为自 UTC 时间 1970 年1月1日 00:00:00 经过的秒数。初始系统时钟是从硬件时间计算得来,计算时会考虑/etc/adjtime的设置。由于这个文件的存在,即使硬件时钟设置的为UTC时间,系统也能显示正确的本地时间。系统启动之后,系统时钟与硬件时钟独立运行。

系统时间管理流程

  • 启动时根据硬件时钟设置系统时间
  • 运行时通过 NTP 守护进程联网校正时间
  • 关机时根据系统时间设置硬件时间。

通过dmesg |grep rtcsudo systemctl stop ntp命令可以证实。

附注

  • date命令仅更改系统时钟;
  • timedatectl set-time 命令会同时影响硬件时钟和系统时钟 Via
  • ArchWiki上有更详细的讲解

如何访问板载RTC

通过hwclock软件:需要管理员(root)权限

常用命令:

  • sudo hwclock -r读取当前硬件时钟
  • sudo hwclock -s 以系统时钟为准写入硬件时钟
  • sudo hwclock -w 以硬件时钟为准设置系统时钟
  • sudo hwclock -u 设置硬件时钟为UTC标准

时间表示有两个标准:localtime 和 UTC(Coordinated Universal Time) 。UTC 是与时区无关的全球时间标准。尽管概念上有差别,UTC 和 GMT (格林威治时间) 是一样的。localtime 标准则依赖于当前时区。

这里建议将硬件时钟设置为UTC标准,以避免使用localtime时可能引起的麻烦和bug。前文已经讲过,系统读取硬件时钟后会根据/etc/adjtime调整(+8h)。

通过用户空间访问RTC

设备地址在/dev/rtcX X为编号

cat /proc/driver/rtc 可以看到RTC时钟信息,仅记录时间数值。如图所示



/sys/class/rtc/rtcX目录下,可以访问控制RTC参数:



详情访问这里

如何使用板载RTC自动从低功耗状态唤醒

linux提供了一个工具rtcwake,可以设置系统延时、定时从低功耗状态唤醒。

因为RTC的特点是即使系统不运行,也能继续计时。而需要在系统运行时计时的应用就没必要用RTC了。

低功耗状态

我们首先来看看Guitar支持哪几种低功耗状态:



TigerBoard的:



RPi2因为没有PMU,所以不支持低功耗状态:

  • freeze:Suspend-To-Idle,纯软件实现,冻结进程+挂起设备+使处理器空闲,Kernel 3.9引入
  • standby:Power-On Suspend,唤醒速度快,CPU在电
  • mem:Suspend-to-RAM,仅内存在电,其他设备处于低功耗状态
  • disk:Suspend-to-disk,也就是常说的休眠状态,将内存内容保存到磁盘。

耗电依次递减。详细解释可以看这里

我们可以直接使用参数使设备进入相应的状态,例如:

echo freeze > /sys/power/state 将会使系统进入freeze状态

如何唤醒请参考PMU手册,然而一般我都是直接插拔电源:-D

使用rtcwake唤醒设备

例1:延迟指定时间后唤醒

sudo rtcwake -m mem -s 20 -v

意思是进入mem状态并于20秒后唤醒,-v会获得更多信息

例2:在指定时间唤醒

sudo rtcwake -m mem -t `date -d 05:00 +%s`

意思是进入mem状态并于本地时间5:00唤醒(05:00和5:00效果一样,注意date命令的%s参数)。因为前文我们设置RTC使用UTC标准,而硬件时钟仅仅记录时间数值,所以系统通过-a参数来读取/etc/adjtime来调整时间,不过这是默认参数,可以不写。

上面讲了几种低功耗状态,此外rtcwake还支持以下参数:

  • off:Poweroff,也就是关机
  • no:Don't suspend,啥都不干,仅仅设置RTC Alarm时间
  • on:Don't suspend,但是会读取RTC时间,等待RTC Alarm。主要用于调试。
  • diable:禁用之前设置的RTC Alarm
  • show:显示RTC Alarm信息

注意:在Guitar上,进入disk状态不正常,串口线带回家了,无法得知发生了什么,以后会补充。更多信息请通过man rtcwake命令查看

各种省电模式可通过dmesg命令查看具体发生了什么。

简单应用

此时我们就可以编写shell脚本,通过Cron计划任务让系统于指定时间添加rtcwake任务后自动关机。

拓展阅读

后记

试用了这么长时间,对Guitar的印象非常好,做工优秀,资料够用,拓展潜力强:自定义底板可以增减模块,当然目前对个人来说有点难。虽然现在没有树莓派那么流行,但是希望以后发展可以越来越好。

吃我一记咸鱼突刺——使用板载RTC定时开机的更多相关文章

  1. stm32填坑之旅 - stm32f103c8t6点亮板载贴片蓝色LED

    转载请注明:https://www.cnblogs.com/rockyf/p/11691622.html 开篇 开篇一定要精彩,不然路人不理睬!下述是笔者作为arm小白的填坑之旅 没错,这个之前一直从 ...

  2. Cubieboard2裸机开发之(二)板载LED交替闪烁

    前言 电路原理在文章http://www.cnblogs.com/lknlfy/p/3583806.html中已经说明,两个LED的原理图是一样的.要使两个LED交替闪烁,只需要在点亮蓝色LED,熄灭 ...

  3. Cubieboard2裸机开发之(一)点亮板载LED

    前言 CUbieboard2板载两个LED,一个绿色的,一个蓝色的,其中绿色LED通过三极管与PH20管脚连接,蓝色LED通过三极管与PH21管脚连接,这里只以蓝色LED为例,电路原理图如图1和图2所 ...

  4. BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍

    BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍 你进入BeagleBone世界的第一步就是将它连接以得到命令提示,然后你就可以处理文件以及执行命令了.在这里,你就可以定制你 ...

  5. 在树莓派3B、Ubuntu 18.04关闭板载Wifi、蓝牙

    树莓派没有传统的BIOS设置界面,文件/boot/firmware/config.txt就相当一个BIOS设置.这里是config.txt的详细文档:https://github.com/raspbe ...

  6. 板载 SPI-FLASH 的烧写方法

    @2018-12-15 [筹划] 通过烧录器(JTAG/SWD)即可方便的烧写板载外部 FLASH [参考] 如何更好地设计面向在板烧录的产品(一)SPI Flash篇 keil将程序装入外部FLAS ...

  7. 板载CAN的树莓派扩展板Strato Pi CAN

    板载CAN的树莓派扩展板Strato Pi CAN   Sfera Labs推出了最新的树莓派扩展组件“灵云派”,其中包括CAN总线,电气隔离的RS-485,RTC和9-65V电源. 位于意大利米兰的 ...

  8. Beaglebone Black教程项目1闪烁板载LED

    Beaglebone Black教程项目1闪烁板载LED 项目1闪烁板载LED 当设置完你的Beaglebone Black的时候,可能早就非常期待你的第一个项目了.下面就来满足大家的愿望,当然,这个 ...

  9. 香蕉派 Banana pi BPI-M1+ 双核开源单板计算机. 板载WIFI

     Banana PI BPI-M1+是一款高性能双核开源硬件单板计算机,Banana PI BPI-M1+是一款比树莓派更强悍的双核Android4.4与Linux产品. Banana PI BP ...

随机推荐

  1. python 列表(增删改查)

    列表 :(列表可以嵌套,列表的中的元素可以为任意) 列表的创建:1.   a = [1, 2, 3] 2.   a = list([1, 2, 3]) 1.查: 索引(下标),都是从0开始 切片 .c ...

  2. Python3的基本数据类型及常用的方法

    python3的基本数据类型: 在python3当中有这么几种基本的数据类型:int(整形).str(字符串).list(列表).tuple(元组).dict(字典).bool(布尔值)等.数字整体划 ...

  3. jmx_exportter+prometheus+grafana监控hadoop

    0.介绍(摘录自https://www.hi-linux.com/posts/25047.html) 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和 ...

  4. xfce-openvas9

    1安装OpenVas 第一步,添加PPA源,在这我用的是一台新装的Ubuntu安装OpenVas,运行以下命令就可以进行安装 root@ubuntu:~# add-apt-repository ppa ...

  5. 【JavaScript 6—基础知识点】:正则表达式(应用)

    导读:其实,我不像大家一样,从一开始就重视着正则表达式,我甚至都觉得好浪费时间浪费精力,都没用的.因为,如果我要判断是不是为数字,我可以使用Numberic()方法,如果要去空格的话,使用trim() ...

  6. 【bzoj1174】[Balkan2007]Toponyms Trie树

    题目描述 给你一个字符集合,你从其中找出一些字符串出来. 希望你找出来的这些字符串的最长公共前缀*字符串的总个数最大化. 输入 第一行给出数字N.N在[2,1000000] 下面N行描述这些字符串,长 ...

  7. [BZOJ2733] [HNOI2012]永无乡(并查集 + 线段树合并)

    传送门 一看到第k大就肯定要想到什么权值线段树,主席树,平衡树之类的 然后就简单了 用并查集判断连通,每个节点建立一颗权值线段树,连通的时候直接合并即可 查询时再二分递归地查找 时间复杂度好像不是很稳 ...

  8. 【bzoj1193】[HNOI2006]马步距离

    [HNOI2006]马步距离 Description Input 只包含4个整数,它们彼此用空格隔开,分别为xp,yp,xs,ys.并且它们的都小于10000000. Output 含一个整数,表示从 ...

  9. 《写给大忙人看的Java核心技术》 勘误

    先附上十分讨喜的封面.这应该是爱丽丝梦游仙境里的那只兔子吧? 勘误表基于原版勘误表制作 链接 截止日期 2017-02-09 对应<写给大忙人看的Java核心技术>2016年1月第1次印刷 ...

  10. SPOJ 4060 A game with probability

    博弈论+dp+概率 提交链接- 题意不是很好懂 Ai 表示剩 i 个石头. A 先手的获胜概率. Bi 表示剩 i 个石头. B先手的获胜概率. 如果想选,对于 Ai: 有 p 的概率进入 Bi−1 ...