RTC(Real_Time Clock)
RTC概述:
RTC(实时时钟,Real-Time Clock)是一种用于跟踪当前日期和时间的计时设备。RTC可以是独立的芯片,也可以是集成在微控制器或处理器中的一个模块。RTC是现代电子设备中不可或缺的一部分,为各种应用提供了可靠的时间服务。
独立电源:RTC可以配备一个独立于主电源的电源,如纽扣电池或超级电容,以确保在主电源断开时仍能持续运行。
低功耗:RTC设计为低功耗设备,以便在备用电源供电时能够长时间运行。
持续运行:与系统时钟或处理器时钟不同,RTC在系统断电或处于睡眠模式时也能持续运行。
日期和时间显示:RTC能够显示当前的日期和时间,包括年、月、日、时、分、秒等。
闹钟和定时器功能:RTC可以设置闹钟或定时器,用于提醒或在特定时间触发事件。
接口:RTC通过各种接口与主系统通信,如I2C、SPI、串行通信或直接通过GPIO引脚。
时间同步:在网络设备中,RTC可以用于时间同步协议,如NTP(网络时间协议),以确保设备时间的准确性。
时间准确性:RTC旨在提供准确的时间测量,通常使用高精度的晶体振荡器作为其时钟源。
RTC单元外接32.768 kHz晶振:这是一种常见的晶振频率,用于RTC因为它能够方便地分频为1 Hz(秒)。这是因为32,768是2的15次方,所以通过15级二分频器,可以得到1 Hz的频率,这非常适合作为时钟的秒脉冲。这种晶振通常具有很高的精度和稳定性,能够确保RTC在长时间内保持准确的时间
I.MX6ull RTC
i.MX6ull芯片的实时时钟(RTC)功能是由其安全非易失性存储(Secure Non-Volatile Storage, SNVS)提供的。
SNVS模块确实包含两个子模块:SNVS_HP(高功耗部分)和SNVS_LP(低功耗部分)。这两个子模块中各有自己的RTC,SNVS_HP模块内部的RTC是非安全的。SNVS_LP模块则包含安全的实时计数器(SRTC)。当系统电源掉电后,SNVS_HP会关闭,因为它依赖于系统电源供电。而SNVS_LP则不同,它在系统掉电之后仍然由备用电源(如纽扣电池)供电,因此所有时间信息得以保存。这意味着,即使在系统断电的情况下,SNVS_LP中的SRTC仍然可以继续工作,保持时间信息的连续性。因此,对于需要在系统断电后仍然保持时间信息的应用场景,必须使用SNVS_LP部分的SRTC
The low-power (battery-backed) section incorporates a secure real time counter, a monotonic counter, and a general-purpose register. The LP portion of the SNVS is powered by a battery that maintains the state of the SNVS_LP registers when the chip is powered off.
低功耗(电池支持)部分包含一个安全实时计数器,一个单调计数器和一个通用寄存器。SNVS的LP部分由电池供电,该电池在芯片断电时保持SNVS_LP寄存器的状态。
SNVS features(SNVS特性)
非安全实时计数器(HP-RTC):
由专用时钟驱动,系统断电时关闭。
可编程的时间报警中断,允许在特定时间点触发中断。
能够以不同频率生成周期性中断,用于定时任务或事件。
单调计数器(LP-MC):
单调计数器的状态是非易失性的,即在断电后也能保持其值。
计数器只能递增
计数器是一个非翻转计数器,即达到最大值后不会回绕。
在安全违规的情况下,计数器的值将失效。
通用寄存器:
通用寄存器的状态也是非易失性的,这意味着它在断电后能保持其值。
寄存器访问保护:
实施特权软件访问策略,确保只有授权的软件能够访问或修改寄存器。
寄存器只能在系统安全监控器处于功能状态时编程。
某些寄存器或值在每个启动周期中只能编程一次,这增加了系统的安全性。
SNVS structure(SNVS结构)
SNVS模块根据电源供应被划分为两个主要的子模块:高功耗域(SNVS_HP)和低功耗域(SNVS_LP)。它们的供电方式如下:
- SNVS_LP - 专用的始终供电域
- SNVS_HP - 系统(芯片)供电域
The following figure illustrates the low power and chip power domains of SNVS.SNVS的低功耗和芯片功耗域示意图如下图所示:
The SNVS_HP section implements all features that enable system communication and provisioning of the SNVS_LP section.SNVS_HP部分实现了支持系统通信和SNVS_LP部分供应的所有特性。The SNVS_LP section provides hardware that enables secure storage and protection of sensitive data.SNVS_LP部分提供了能够安全存储和保护敏感数据的硬件。
外部电源(External Supply)
- VDD_HIGH_IN:从外部电源输入到高功耗域的电源输入端。
高功耗域(High Power Domain)
- Arm:系统中的主要处理器,负责执行大部分计算任务。它通过编程接口与SNVS_HP进行通信,并且可以接收来自SNVS_HP的中断信号。
- SNVS_HP:高功耗域中的SNVS部分,负责实现系统通信和低功耗域(SNVS_LP)的供应。它通过跨域信号与低功耗域进行通信。
低功耗域(Low Power Domain)
- VDD_SNVS_IN:从纽扣电池(coin cell)输入到低功耗域的电源输入端,用于在主电源关闭时保持低功耗域的运行。
- SNVS_LP:低功耗域中的SNVS部分,提供硬件支持以实现敏感数据的安全存储和保护。它包括一个安全实时时钟(SRTC)。
- SRTC (timer):这是低功耗域中的一个定时器,用于在低功耗模式下进行时间管理。
电源管理
- PMIC_ON_REQ:这是一个信号,用于请求电源管理集成电路(PMIC)开启或维持对系统的供电。
- ON/OFF (button):这是一个开关按钮,允许用户手动控制系统的电源状态。
SNVS_HP (high-power domain 高功率域)
The SNVS_HP is in the chip's power-supply domain and thus receives the power along with the rest of the chip. The SNVS_HP provides an interface between the SNVS_LP and the rest of the system; there is no way to access the SNVS_LP registers except through the SNVS_HP. For access to the SNVS_LP registers, the SNVS_HP must be powered up.It uses a register access permission policy to determine whether the access to the particular registers is permitted.SNVS_HP位于芯片的电源域,因此与芯片的其余部分一起接收电源。SNVS_HP提供了SNVS_LP和系统其他部分之间的接口;除了通过SNVS_HP,没有其他方法可以访问SNVS_LP寄存器。为了访问SNVS_LP寄存器,SNVS_HP必须上电。它使用一个寄存器访问权限策略来确定是否允许访问特定的寄存器。
Non-secure real-time counter(非安全实时计数器)
The SNVS _HP has an autonomous non-secure real-time counter. The counter is notactive and is reset when the system is powered down. The HP RTC can be used by any application; it has no privileged software access restrictions.The counter can besynchronized with the SNVS_LP SRTC by writing to a specific bit in the SNVS_HPcontrol register.SNVS_HP拥有一个独立的非安全实时计数器。该计数器在系统断电时不活跃并被重置。任何应用程序都可以使用HP RTC,它没有特权软件访问限制。可以通过向SNVS_HP控制寄存器中的特定位写入来与SNVS_LP SRTC同步。
Time counter alarm(时钟计数器报警)
SNVS_HP非安全实时时钟(RTC)拥有自己的时间报警寄存器。任何应用程序都可以更新这个寄存器。SNVS_HP时间报警能够生成中断来提醒主机处理器,并可以从其低功耗模式中唤醒主机处理器。需要注意的是,如果整个系统断电,这个报警也无法唤醒整个系统,因为报警本身也会断电。
Periodic interrupt(周期性中断)
The SNVS_HP non-secure RTC incorporates a periodic interrupt. The periodic interrupt is generated when a zero-to-one or one-to-zero transition occurs on the selected bit of the RTC. The periodic interrupt source is chosen from the 16 bits of the HP RTC according to the PI_FREQ field setting in the HP control register. This bit selection also defines the frequency of the periodic interrupt.
SNVS_HP非安全实时时钟(RTC)集成了一个周期性中断功能。当在RTC选定的比特位上发生从0到1或从1到0的跳变时,就会产生周期性中断。周期性中断源是从HP RTC的16位中选择的,根据HP控制寄存器中PI_FREQ字段的设置来选择。这种位选择也定义了周期性中断的频率
SNVS_LP (low-power domain低功耗域)
SNVS_LP是一个数据存储子系统。它的目的是存储和保护系统数据,无论系统的主电源状态如何。
SNVS_LP处于始终上电的域,该域是一个独立的电源域,拥有自己的电源。
When the chip power-supply domain loses power, the The SNVS_LP continues to operate normally and ignores all inputs from the SNVS_HP.
当芯片电源域断电时,SNVS_LP继续正常工作,忽略来自SNVS_HP的所有输入。
Monotonic Counter (MC 单调计数器)
在安全应用中,单调计数器(MC)的作用是提供一个在整个产品生命周期内不会耗尽或返回到任何先前值的计数。这种设计确保了MC的值具有唯一性和不可预测性,这对于保护系统免受重放攻击(replay attacks)和其他安全威胁至关重要。
不可重置和不可循环:MC的设计不允许它被重置或循环回到起始计数,这意味着一旦计数器开始计数,它将一直递增,直到达到最大值。
不翻转(Non-rollover):当MC达到其最大值时,它不会翻转回起始值。相反,会生成一个单调计数器翻转指示,这个指示会被发送到SNVS_LP的篡改监控器。
篡改监控器:SNVS_LP的篡改监控器接收到MC翻转指示后,会向主处理器生成一个中断,通知系统发生了安全事件。
MC_ERA_BITS:MC的最高有效位(MC_ERA_BITS字段)是从熔丝(fuses)派生的。这意味着即使在LP电源丢失的情况下,MC_ERA_BITS的值也能被保留。
电源丢失处理:如果LP电源丢失,MC的当前计数值(MON_COUNTER)将丢失。为了在这种情况下保持单调性,芯片的启动固件会在下一次上电时检测到MC值无效,并触发另一个熔丝,这将更新MC_ERA_BITS字段。
保证单调性:通过增加MC_ERA_BITS字段的值,确保了MC的新值总是大于其过去的任何值,从而保持了MC的单调性。
SNVS reset and system powerup(SNVS复位和系统上电)
HP hard(高功耗域硬复位)
Source(来源): ipg_hard_async_reset_b
Characteristics(特性): active-low, asynchronous(低电平有效,异步)
Internally resets(内部复位): All SNVS_HP SNVS_LP registers and flops(所有SNVS_HP和SNVS_LP寄存器和触发器)
LP Power On Reset (POR)(低功耗域上电复位)
Source(来源): lp_por_b
Characteristics(特性): active-low, asynchronous(低电平有效,异步)
Internally resets(内部复位): All SNVS_LP registers and flops(所有SNVS_LP寄存器和触发器)
LP software reset(低功耗域软件复位)
Source(来源): software
Characteristics(特性): active-high, synchronous, one cycle(高电平有效,同步,单周期)
Internally resets(内部复位): All SNVS_LP registers and flops. The LP software reset can be asserted if not disabled(所有SNVS_LP寄存器和触发器。如果未被禁用,LP软件复位可以被断言)
SNVS interrupts and alarms (SNVS中断和警报)
• Functional interrupt (active-low) (功能中断)
• Real-time clock period interrupt (实时时钟周期中断)
与实时时钟(RTC)相关,用于在特定的时间间隔或时间点触发。它可以用于实现周期性的任务调度,如时间同步、定时唤醒或周期性数据记录。
SNVS功能中断(SNVS functional interrupt)
来源(Source): RTC时间报警(RTC time alarm)
默认配置(Default configuration): 禁用(Disable)
配置选项(Configuration options): 启用/禁用(Enable/Disable)
SNVS功能中断(SNVS functional interrupt)
来源(Source): RTC周期性中断(RTC periodic interrupt)
SNVS断电(按钮)中断(SNVS power off (button) interrupt)
来源(Source): BTN输入信号(BTN input signal)
默认配置(Default configuration): 50毫秒去抖动(50 ms debounce)
配置选项(Configuration options): 去抖时间(Debounce time)
去抖动:预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期。
Programming guidelines(编程指南)
This section provides the initialization and application information for the SNVS module.提供SNVS模块的初始化和应用程序的信息
RTC control bits setting (RTC控制位的设置)
All SNVS registers are programmed from the register bus. Therefore, any changes are synchronized with the IP clock. Several registers can also change synchronously with the RTC clock after they are programmed. To avoid IP clock and RTC clock synchronization issues, these values can only be programmed when the corresponding function is disabled. This table presents the list of these values with the control bit setting required for programming
所有SNVS寄存器都是通过寄存器总线进行编程的。因此,任何更改都会与IP时钟同步。一些寄存器在编程后也可以与RTC时钟同步更改。为了避免IP时钟和RTC时钟同步问题,这些值只能在相应功能被禁用时进行编程。
编程同步值的步骤:
1.检查使能位值。如果已设置,则清除它。
2.验证使能位是否已清除, 验证使能位设置有两个原因:
i.使能位的清除不会立即发生。它需要三个IP时钟周期和两个RTC时钟周期来改变使能位的值。
ii.如果使能位被锁定为编程,则无法清除。
3.编程所需的值。
4.设置使能位。它需要三个IP时钟周期和两个RTC时钟周期来设置位。
RTC value read (读取RTC计数器值)
在什么情况下软件可能会从RTC(实时时钟)寄存器中读取到损坏的值,以及如何避免这些问题:
异步时钟问题:RTC计数器由一个慢速32-kHz的时钟递增,这个时钟与系统时钟是异步的。在软件读取计数器值之前,计数器的值会同步到系统时钟。同步寄存器可能会在计数器更新过程中捕获计数器的值。在这种情况下,不能保证所有位都被同步寄存器正确采样,因此软件读取的值可能是错误的。
跨寄存器读取问题:RTC的值可能超过单次总线读取事务的32位长度。因此,软件需要读取两个寄存器,每个寄存器保存计数器值的一部分。在读取其中一个寄存器之后但在读取第二个寄存器之前,两个寄存器都可能更新它们的值。在这种情况下,软件组合的值可能是错误的。
为了避免这些问题,强烈建议软件执行以下步骤:
- 连续两次读取:软件应该对RTC值执行两次连续读取。
- 比较两次读取结果:如果连续两次读取的结果相似,则值是正确的。
- 处理不一致结果:如果连续两次读取的结果不一致,软件应该再执行两次读取。
General initialization guidelines(通用初始化指导方针)
Perform these steps to properly initialize the module:1. Enable the interrupts in the SNVS control and configuration registers.2. Program the SNVS general functions/configurations.3. User-specific: Set the lock bits要正确初始化模块,请执行以下步骤:
1. 在SNVS控制和配置寄存器中启用中断。
2. 编程SNVS的通用功能/配置。
3. 用户特定:设置锁定位。
I.MX6ull中SNVS register definition (寄存器定义)
The SNVS registers consist of two types:
• Privileged read/write accessible
• Non-privileged read/write accessible
SNVS寄存器分为两种类型:
特权读/写可访问:这些寄存器只能被特权软件进行读/写访问。未授权的写访问将被忽略,未授权的读访问将返回零。
非特权读/写可访问:任何软件都可以对这些寄存器进行读/写访问。
The non-privileged software can access privileged access registers when the non-privileged software access enable bit is set in the SNVS_HPcommand register.
当在SNVS_HPcommand寄存器中设置了非特权软件访问使能位时,非特权软件可以访问特权访问寄存器。
SNVS寄存器根据安全等级分为以下几类:
非安全(Non-secure):这些寄存器不提供额外的安全保护。
可信(Trusted):这些寄存器提供一定程度的安全性,但可能不包括加密保护。
安全(Secure):这些寄存器提供最高级别的安全性,通常包括加密保护。
The LP register values are set only on the LP POR and are unaffected by the system (HP) POR. The HP registers are set only on the system POR and are unaffected by the LP POR.LP(低功耗域)寄存器的值仅在LP POR(上电复位)时设置,并且不受系统HP POR(上电复位)的影响。HP(高功耗域)寄存器的值仅在系统POR时设置,并且不受LP POR的影响。
结语:
无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力
原文地址:https://blog.csdn.net/2301_79695216/article/details/144225924
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!