#real-time-clock #rtc #driver #clock #real-time #embedded-hal-driver

无std mcp794xx

适用于MCP794xx实时时钟/日历(RTC)系列的跨平台Rust驱动程序。兼容MCP7940N、MCP7940M、MCP79400、MCP79401、MCP79402、MCP79410、MCP79411和MCP79412。

4个版本 (2个破坏性更新)

0.3.0 2022年8月16日
0.2.1 2021年9月8日
0.2.0 2020年2月9日
0.1.0 2019年9月15日

#2047 in 嵌入式开发

MIT/Apache

74KB
1K SLoC

Rust MCP794xx实时时钟/日历家族驱动程序

crates.io Docs MSRV Build Status Coverage Status

这是一个基于embedded-hal特性的跨平台Rust驱动程序,用于MCP794xx实时时钟/日历系列。

此驱动程序允许您

  • 读取和设置日期和时间。见:datetime()
  • 读取和设置日期。见:date()
  • 读取和设置时间。见:time()
  • 读取和设置日期和时间的各个元素。例如,见:year()
  • 启用和禁用实时时钟。见:enable()
  • 读取是否正在运行振荡器。见:is_oscillator_running()
  • 读取当前年份是否为闰年。见:is_leap_year()
  • 启用和禁用外部振荡器源的使用。见:`enable_external_oscillator。
  • 设置输出引脚逻辑电平。见:set_output_pin()
  • 启用和禁用粗调。见:enable_coarse_trim()
  • 设置调整值。见:set_trimming()
  • 电源
    • 读取电源是否已失效。见:has_power_failed()
    • 清除has-power-failed标志。参见:clear_power_failed()
    • 读取电源关闭时的日期/时间。参见:get_power_down_datetime()
    • 读取电源恢复时的日期/时间。参见:get_power_up_datetime()
    • 启用和禁用备用电池电源的使用。参见:enable_backup_battery_power()
  • SRAM
    • 读取并写入SRAM的字节数据。参见:read_sram_byte()
    • 读取并写入SRAM的字节数组。参见:read_sram_data()
    • 从SRAM读取当前位置。参见:read_sram_current_byte()
  • 警报
    • 启用和禁用警报。参见:enable_alarm()
    • 使用多个匹配策略和输出引脚极性设置警报。参见:set_alarm
    • 读取警报是否已匹配。参见:has_alarm_matched
    • 清除表示警报已匹配的标志。参见:clear_alarm_matched_flag
  • 波形生成
    • 启用和禁用方波生成。参见:enable_square_wave
    • 选择方波频率。参见:set_square_wave_frequency
  • 受保护EEPROM
    • 读取并写入受保护EEPROM的字节数据。参见:read_protected_eeprom_byte()
    • 读取并写入受保护EEPROM的字节数组。参见:read_protected_eeprom_data()
    • 读取EUI-48。参见:read_eui48()
    • 读取EUI-64。参见:read_eui64()
  • EEPROM
    • 读取并写入EEPROM的字节数据。参见:read_eeprom_byte()
    • 读取并写入EEPROM的字节数组。参见:read_eeprom_data()
    • 设置EEPROM块写保护。参见:set_eeprom_write_protection()
    • 从EEPROM读取当前位置。参见:read_eeprom_current_byte()

介绍性博客文章

设备

此驱动程序与以下设备兼容:MCP7940N、MCP7940M、MCP79400、MCP79401、MCP79402、MCP79410、MCP79411和MCP79412。

实时时钟/日历(RTCC)使用内部计数器跟踪时间,包括小时、分钟、秒、日、月、年和星期几。可以在所有计数器上配置警报,包括月份。对于使用和配置,设备支持高达400 kHz的I2C通信。

开漏、多功能的输出引脚可以配置为在警报匹配时断言,输出可选频率的方波,或作为通用输出。

这些设备设计用于使用32.768 kHz的调谐叉晶体和外部晶体负载电容。芯片上的数字微调可用于调整由晶体公差和温度引起的频率变化。

当主电源断电时,SRAM和计时电路由备用电源供电,使得设备能够维持准确的时间并保持SRAM的内容。设备切换到备用电源和主电源恢复的时间都会被电源故障时间戳记录。

某些设备具有1 Kbit的内部非易失性EEPROM,具有软件可写保护的区域。还有一个64位的受保护非易失性存储器,只有完成解锁序列后才能写入,非常适合存储唯一的ID或其他关键信息。

某些设备预先编程了EUI-48和EUI-64地址。也提供定制编程服务。

数据手册

用法

要使用此驱动程序,请导入此存储库和一个embedded_hal实现,然后实例化适当的设备。

以下示例将创建MCP7940N设备的一个实例。其他设备可以通过类似的方法创建,例如:Mcp794xx::new_mcp79400(...)

请在此存储库中查找使用硬件的附加示例:[driver-examples](https://github.com/eldruin/driver-examples)

use linux_embedded_hal::I2cdev;
use mcp794xx::{DateTimeAccess, Mcp794xx, NaiveDate, Rtcc};

fn main() {
    let dev = I2cdev::new("/dev/i2c-1").unwrap();
    let mut rtc = Mcp794xx::new_mcp7940n(dev);
    rtc.enable().unwrap();
    let datetime = NaiveDate::from_ymd(2018, 8, 20).and_hms(19, 59, 58);
    rtc.set_datetime(&datetime).unwrap();
    rtc.enable().unwrap();
    // do something else...
    let seconds = rtc.seconds().unwrap();
    println!("Seconds: {}", seconds);

    let _dev = rtc.destroy();
}

支持

有关问题、问题、功能请求和其他更改,请在github项目中提交问题

许可证

根据您的要求,许可协议可以是以下两种之一

任选其一。

贡献

除非您明确声明,否则您提交给工作以包含在内的任何贡献,根据Apache-2.0许可证的定义,均应双许可如上所述,无需任何附加条款或条件。

依赖项

~1.5MB
~19K SLoC