Mstar 平台RTC 时钟(RX8130CE)调试

news/2025/1/15 18:06:22/

很多嵌入式设备在使用过程中,会碰到未联网的状态,但是有需要保证时间的正常,或者定时开关机功能。这个时候就需要添加RTC 时钟模块。下面通过mstar 平台的rx8130ce 型号时钟调试为例,一起分享。

RTC HW 连接

在这里插入图片描述
从HW提供的原理图设计时,提供了两款RTC 时钟芯片,地址分别是0x64,0xD0。
在这里插入图片描述
从提供的PCB 板上,UT3 未上件。 我们进一步查询I2C 的连接走线。
在这里插入图片描述
分析完原理图,要确保硬件的一下几点正常:

  1. RTC 的power 连接正常,电池(待机/断电时供电)和主板(上电时)
  2. RTC 的I2C 和主芯片的连接正常;
  3. RTC 的I2C 地址 的确定;

I2C 地址配置

在这里插入图片描述
找到pin 脚定义,然后配置总线,设置delay 时间,接着在总线下面挂载设备。

//Bus Info Define
#define BOARD_I2C_SWBUS_NUM               3
#define BOARD_I2C_HWBUS_NUM               0
#define BOARD_I2C_DEVICE_NUM              6static SWI2CBus_t BOARD_I2C_SWBUS[BOARD_I2C_SWBUS_NUM]=
{//Example for SW I2C => { 1, PAD_DDCR_CK, PAD_DDCR_DA, 60, }, //SW_I2C  /SCL_PAD /SDA_PAD /Delay// Bus-0{PAD_DDCR_CK, PAD_DDCR_DA, 100}, //IS_SW_I2C  /SCL_PAD /SDA_PAD /Delay// Bus-1{PAD_TGPIO0 , PAD_TGPIO1, 100},// Bus-2{PAD_GPIO19 , PAD_GPIO20,100},// Bus-3//{PAD_GPIO2  , PAD_GPIO3,100},
};static HWI2CBus_t BOARD_I2C_HWBUS[BOARD_I2C_HWBUS_NUM];//Device Info Define
static I2CDeviceInfo_s  Board_I2C_Dev[BOARD_I2C_DEVICE_NUM] =
{//Example => { TUNER1, 1, 0xC2 }, //gID(U32)  /i2c_bus(U8) /slave_id(U8){TUNER1        , 1,  0xC0}, //gID(U32)  /i2c_bus(U8) /slave_id(U8)// AD82088{AMP_SLAVER_ID , 1,  0x62},  // 0x31 << 1 --> 0x62// RTC{RTC_I2C_ID    , 1,  0x64},// temp R/W{TMP102_CHIP_R  , 1, 0x90},{TMP102_CHIP_W  , 1, 0x91},// TCA9535{TCA9539_I2C_ID , 2, 0xE8},  // 0x74 << 1  = 0xE8
};

{RTC_I2C_ID , 1, 0x64}, 就是挂载第二组总线上的RTC,地址为0x64.

I2C 的读写

在这里插入图片描述
注意上面的RTC8130_SECADDR 是 RTC 的寄存器地址,跟时间日期相关的几个寄存器地址如下:

#define RTC8130_SLAVEADDR   0x64
#define RTC8130_SECADDR     0x10
#define RTC8130_MINADDR     0x11
#define RTC8130_HOURADDR    0x12
#define RTC8130_WEEKADDR    0x13
#define RTC8130_DATEADDR    0x14
#define RTC8130_MONTHADDR   0x15
#define RTC8130_YEARADDR    0x16

这些地址在协议里面会有说明。

RTC 时间数据格式

在这里插入图片描述
分析datasheet 中RTC 时间格式,其中秒,分,时,天,月,年 都是BCD 码格式存储。周 的存储方法不一样,按照所在的bit 位标记为第几周,一个月最多跨6 周。

  1. 设置时间
static MAPI_U8 HEX2BCD(MAPI_U8 cHEXData)
{MAPI_U8 cTemp;cTemp = ((cHEXData / 10) << 4) | (cHEXData % 10);return cTemp;
}

先将16进制的数据转换成BCD 码,然后设置到对应寄存器中。

	SecAdd = RTC8130_SECADDR;  // 0x10TimeTable[RTC_SECOND] = HEX2BCD(RTC8130_TimeData.param[RTC_SECOND]) & 0x7F;TimeTable[RTC_MINUTE] = HEX2BCD(RTC8130_TimeData.param[RTC_MINUTE]) & 0x7F;TimeTable[RTC_HOUR]   = HEX2BCD(RTC8130_TimeData.param[RTC_HOUR])   & 0x3F;TimeTable[RTC_WEEK]   = RTC8130_TimeData.param[RTC_WEEK] & 0x7F ;TimeTable[RTC_DATE]   = HEX2BCD(RTC8130_TimeData.param[RTC_DATE])   & 0x3F;TimeTable[RTC_MONTH]  = HEX2BCD(RTC8130_TimeData.param[RTC_MONTH])  & 0x1F;TimeTable[RTC_YEAR]   = HEX2BCD(RTC8130_TimeData.param[RTC_YEAR])   & 0xFF;ret = iptr->WriteBytes(1,&SecAdd,7,&TimeTable[RTC_SECOND]);
  1. 获取时间
	mapi_i2c *iptr  = NULL;MAPI_U8  regAddr = RTC8130_SECADDR;RX8130_PRINTF(printf("[%s][%d] RX81390 Enter .\n",__FUNCTION__,__LINE__));iptr = mapi_i2c::GetI2C_Dev(RTC_I2C_ID);if(iptr == NULL){printf("[%s][%d] RX81390 Invalid I2c rtc addr .\n", __FUNCTION__,__LINE__);return MAPI_FALSE;}ret = iptr->ReadBytes(1, &regAddr, 7, TimeTable);if(MAPI_FALSE == ret){printf("[%s][%d] RX81390 Read ret = %d\n", __FUNCTION__,__LINE__,ret);return MAPI_FALSE;}RTC8130_TimeData.param[RTC_SECOND] = BCD2HEX(TimeTable[0]);RTC8130_TimeData.param[RTC_MINUTE] = BCD2HEX(TimeTable[1]);RTC8130_TimeData.param[RTC_HOUR]   = BCD2HEX(TimeTable[2]);RTC8130_TimeData.param[RTC_WEEK]   = TimeTable[3] & 0x7F;RTC8130_TimeData.param[RTC_DATE]   = BCD2HEX(TimeTable[4]);RTC8130_TimeData.param[RTC_MONTH]  = BCD2HEX(TimeTable[5]);RTC8130_TimeData.param[RTC_YEAR]   = BCD2HEX(TimeTable[6]);

将读取到的BCD码转换成16进制数据给上层使用。

static MAPI_U8 BCD2HEX(MAPI_U8 cBCDData)
{MAPI_U8 cTemp;cTemp = ((cBCDData >> 4) * 10) + ( cBCDData & 0x0F);return cTemp;
}

另外要主要周,年的范围。例如, 年的最大值 165
(80+40+20+10+8+4+2+1),那么实际使用的需要补齐。
2019 年则传入RTC时是19,1970 传入应该是70 。一般定时也不多超过100年,所以还是能够满足实际要求的。

RTC 初始配置

在这里插入图片描述
datasheet 显示 Extension Register,Flag Register,Control Register0,Control Register1 需要设置默认状态。

RX8130_CONFIG g_RX8130_CONFIGData[] =
{{0x30,0x80},//enable DTE{0x1c,0x04},{0x1d,0x06},{0x1e,0x00},{0x1f,0x00},
};
	iptr = mapi_i2c::GetI2C_Dev(RTC_I2C_ID);if(iptr == NULL){printf("[%s][%d] RX81390 Invalid I2c mcu addr .\n",__FUNCTION__,__LINE__);return ret;}for(i=0; i<sizeof(g_RX8130_CONFIGData)/sizeof(g_RX8130_CONFIGData[0]); i++){unAddr = g_RX8130_CONFIGData[i].RX8130_Address;unData = g_RX8130_CONFIGData[i].RX8130_InitData;ret = iptr->WriteBytes(1, &unAddr, 1, &unData);RX8130_PRINTF(printf("[%s][%d] RX8130 Write [0x%02x : 0x%02X] ret = %d\n",__FUNCTION__,__LINE__,unAddr,unData,ret));}return ret;

按照对应bit 位将初始值设入寄存器即可完成初始化,后面就可以正常设置,获取时间。

驱动源码

https://download.csdn.net/download/kehyuanyu/11987005


http://www.ppmy.cn/news/228708.html

相关文章

Lenovo-ideapad-320S_换固态硬盘_系统迁移

由于难以忍受笔记本长达4分钟的开机时间&#xff0c;前几天买固态硬盘换掉了机子的机械盘。在此把经验稍微总结一下&#xff0c;希望帮助同有此困惑的人。 首先要确定你的笔记本型号&#xff0c;我的是 Lenovo-ideapad-320S&#xff0c;主板上具有一个额外 m.2 插口&#xff0…

自学网络安全解决问题方法

自学网络安全很容易学着学着就迷茫了&#xff0c;找到源头问题&#xff0c;解决它就可以了&#xff0c;所以首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题&#xff0c;看到后面有惊喜哦 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xf…

华为OD机试真题 Java 实现【关联子串】【2023Q1 100分】,附详细解题思路

一、题目描述 给定两个字符串str1和str2&#xff0c; str1进行排列组合只要有一个为str2的子串则认为str1是str2的关联子串&#xff0c; 请返回子串在str2的起始位置&#xff0c;若不是关联子串则返回-1。 二、输入描述 qwe dsgfasgfwe 三、输出描述 -1 四、解题思路 …

指针 --- 进阶

先看目录&#xff0c;看你知道多少 目录 1.字符指针 2.指针数组 3.数组指针 4.数组传参和指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针 8.回调函数 什么是指针&#xff0c;我们在之前的《指针》章节已经接触过了&#xff0c;我们知道了指针的概念: 1…

GC4931P 宽电压有感方波三相直流无刷电机预驱动芯片 国产低成本替代allegro A4931

GC4931P是一款三相无刷直流电机预驱动芯片。芯片可以驱动N 型功率 MOSFET&#xff0c; 最高电源到 36V。芯片状态切换逻辑受三个相位差为 120的霍尔输入确定。   芯片集成固定衰减时间的脉冲调制来控制电流并且抑制励磁涌流&#xff1b;堵转保护时间可调&#xff1b;过温保护…

机智云+ESP8266+STC89C52

1.注册机智云账号 2.具体详细研究机智云的开发流程&#xff0c;详情见链接&#xff1a;http://docs.gizwits.com/zh-cn/overview/overview.html 3.充分利用机智云提供的调试工具(GIZ_SerialTool中模拟GAgent模拟的是GPRS不是WIFI模组&#xff0c;部分WiFi模组协议不适用) 4.…

NY8A051F单片机规格书-深圳泛海微

NY8A051F是以EPROM作為記憶體的8位元微控制器&#xff0c;專為多IO產品的應用而設計&#xff0c;例如遙控器、風扇/燈光控制或是遊樂器周邊等等。採用CMOS製程並同時提供客戶低成本、高性能等顯著優勢。NY8A051F核心建立在RISC精簡指令集架構可以很容易地做編輯和控制&#xff…

UCC28C44DR规格

UCC28C44DR规格 输出类型 晶体管驱动器 功能 升压&#xff0c;升压/降压 输出配置 正 拓扑 升压&#xff0c;反激&#xff0c;正激转换器 输出数 1 输出阶段 1 电压 - 电源&#xff08;Vcc/Vdd&#xff09; 9V ~ 18V 频率 - 开关 最高 1MHz 占空比&#xff08;最大&#xff09;…