zmd213 2024-02-07 15:36 采纳率: 0%
浏览 6

MYD-Y6ULX:epron rtc:使用的epron 的 rx_8025t芯片,断电重启date 不保存

MYD-Y6ULX:epron rtc:使用的epron 的 rx_8025t芯片,断电重启date 不保存

MYD-Y6ULX开发板
修改RTC芯片,使用rx_8025T
现象:
date -s "2022-1-2 3:4:5"
hwclock -w 能够写,
hwclock -r 能够读:2022-1-2 3:4:5
但是断电重启,date打印 1970-1-1
不断电重启,时间是对的。

rx8025 will be probe
rx8025 will be init
rx8025 0-0032: Unable to read registers #14..#15
i2c i2c-0: probing for rx8025 failed
rx8025: probe of 0-0032 failed with error -110
snvs_rtc 20cc000.snvs:snvs-rtc-lp: rtc core: registered 20cc000.snvs:snvs-r as rtc0
i2c /dev entries driver

下面内容是我这里本机的配置内容:

硬件配置引脚为:

img

设备树配置是:

&i2c1 {
    status = "okay";
    rtc: rtc@32 {
        // compatible = "espon,rx8025";
        compatible = "rx8025";
        reg = <0x32>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_rx8025_irq>;
    };
};

其中i2c1引脚配置:

Device Driver ---->
      Real Time Clock ---->
              <*> Epson RX-8025A/NB

make menuconfig:

Device Driver ----> Real Time Clock ----> <*> Epson RX-8025A/NB

rtc-rx8025.c文件配置修改

static int rx8025_read_reg(struct i2c_client *client, int number, u8 *value)
{
    // int ret = i2c_smbus_read_byte_data(client, (number << 4) | 0x08);
    int ret = i2c_smbus_read_byte_data(client, number );
.....
}
 
static int rx8025_read_regs(struct i2c_client *client,
                int number, u8 length, u8 *values)
{
    // int ret = i2c_smbus_read_i2c_block_data(client, (number << 4) | 0x08,
    //                     length, values);
    int ret = i2c_smbus_read_i2c_block_data(client, number ,
                        length, values);
....
}
 
static int rx8025_write_reg(struct i2c_client *client, int number, u8 value)
{
    // int ret = i2c_smbus_write_byte_data(client, number << 4, value);
    int ret = i2c_smbus_write_byte_data(client, number , value);
....
}
 
static int rx8025_write_regs(struct i2c_client *client,
                 int number, u8 length, u8 *values)
{
    // int ret = i2c_smbus_write_i2c_block_data(client, (number << 4) | 0x08,
    //                      length, values);
    int ret = i2c_smbus_write_i2c_block_data(client, number ,
                         length, values);
....
}
static struct i2c_driver rx8025_driver = {
    .driver = {
        // .name = "rtc-rx8025",
        .name = "rx8025",
        .owner = THIS_MODULE,
    },
    .probe        = rx8025_probe,
    .remove        = rx8025_remove,
    .id_table    = rx8025_id,
};
 
module_i2c_driver(rx8025_driver);
 
MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
//MODULE_DESCRIPTION("RX-8025 SA/NB RTC driver");
MODULE_DESCRIPTION("RX-8025T RTC driver");
MODULE_LICENSE("GPL");

  • 写回答

3条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-07 15:39
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    根据您提供的信息,MYD-Y6ULX开发板上的RTC芯片RX-8025T在断电重启后无法保存时间。尽管您可以成功设置和读取时间,但一旦断电并重新启动,系统日期会重置为1970-1-1。

    问题可能出在以下几个方面:

    1. 硬件连接或电源管理:确保RTC芯片的备用电源(例如电池)在主电源断开时能够正常供电,以便在上电时保持RTC内部的时间数据。

    2. 设备树配置:虽然您提供了部分设备树配置,但需要确认是否正确设置了RX-8025T所需的全部寄存器地址、中断以及其他必要的硬件配置项。

    3. 驱动程序兼容性:您提到了对rtc-rx8025.c文件的一些修改。这种修改可能会影响与RX-8025T芯片的通信方式,特别是移除了原始代码中针对该芯片特定操作的位移操作。请检查芯片手册以确保这些更改与RX-8025T的I2C接口规范相匹配。

    4. EEPROM写入问题:即使RTC能够在运行时正确读写时间,但如果在断电时不能将时间数据可靠地写入其内部非易失性存储(EEPROM),也会导致时间丢失。

    为了进一步诊断问题,请尝试以下步骤:

    • 检查RTC芯片的datasheet以确保所有硬件配置和软件驱动都符合规格。
    • 确认RTC的备用电源工作正常。
    • 恢复rtc-rx8025.c文件到官方默认状态,并确保设备树配置正确无误。
    • 查看系统日志以获取更多关于i2c错误的信息(如上述rx8025 0-0032: Unable to read registers #14..#15)。

    如果以上步骤无法解决问题,请考虑使用具有已知良好驱动支持和经过验证的RTC芯片进行测试,以排除硬件故障的可能性。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月7日

悬赏问题

  • ¥50 带防重放token(Antireplay-Token)的网站怎么用Python发送请求
  • ¥15 visa版本没问题,串口调试助手调试串口正常使用,但是labview刷新不出来
  • ¥15 java MQTT SSL证书
  • ¥20 求一个手机号或者Wxid转微信号的工具
  • ¥20 msconfig开启安全引导后重启电脑黑屏
  • ¥15 对email表单做了一般邮箱正则校验,现在需要额外输入为hotmail或outlook、gmail时做特定邮箱校验,不符合提示出来。并且保证不影响其他正确的邮箱格式通过校验,通过不会提示。
  • ¥20 Win11,bitblocker密钥恢复失败
  • ¥15 stm32 cubemx配置sdram,初始化后无法读写sdram
  • ¥100 上位机到dtu再到485继电器模块 目前结束命令有百分之2左右概率执行失败求指导
  • ¥15 ifcopenshell库在vs2019下的配置