时钟测试完毕
This commit is contained in:
@@ -92,6 +92,85 @@ static void sd2506_phase_basic(void)
|
||||
}
|
||||
#endif /* ENABLE_RTC_BASIC_TESTS */
|
||||
|
||||
/* ===================== Phase 2:全功能 API 覆盖 ===================== */
|
||||
#ifdef ENABLE_RTC_API_TESTS
|
||||
static void sd2506_phase_api(void)
|
||||
{
|
||||
DBG_INFO("=== SD2506 Phase 2: full API coverage ===");
|
||||
|
||||
/* TC-RTC-010: BCD<->DEC 互转(纯算法,确定性,无需硬件交互) */
|
||||
int conv_ok = 1;
|
||||
uint8_t samples[][2] = {
|
||||
{0, 0x00U}, {1, 0x01U}, {9, 0x09U}, {10, 0x10U}, {23, 0x23U},
|
||||
{59, 0x59U}, {60, 0x60U}, {99, 0x99U}, {42, 0x42U}, {88, 0x88U}
|
||||
};
|
||||
for (uint32_t i = 0U; i < (sizeof(samples) / sizeof(samples[0])); i++) {
|
||||
uint8_t dec = samples[i][0];
|
||||
uint8_t bcd = samples[i][1];
|
||||
if (sd2506_dec_to_bcd(dec) != bcd) {
|
||||
conv_ok = 0;
|
||||
DBG_ERROR(" dec_to_bcd(%u) != 0x%02X", (unsigned int)dec, (unsigned int)bcd);
|
||||
}
|
||||
if (sd2506_bcd_to_dec(bcd) != dec) {
|
||||
conv_ok = 0;
|
||||
DBG_ERROR(" bcd_to_dec(0x%02X) != %u", (unsigned int)bcd, (unsigned int)dec);
|
||||
}
|
||||
}
|
||||
SD2506_TEST_CHECK(conv_ok, "bcd<->dec round-trip (10 samples)");
|
||||
|
||||
/* TC-RTC-011: 内部温度读取 */
|
||||
int8_t temp = 0;
|
||||
int ret = sd2506_get_temperature(&temp);
|
||||
SD2506_TEST_CHECK(ret == SD2506_OK, "sd2506_get_temperature() ret=%d (expect 0)", ret);
|
||||
if (ret == SD2506_OK) {
|
||||
DBG_INFO(" temperature: %d C", (int)temp);
|
||||
SD2506_TEST_CHECK(temp >= -40 && temp <= 85,
|
||||
"temperature in range [-40,85]: %d", (int)temp);
|
||||
}
|
||||
|
||||
/* TC-RTC-012: 电池电压(毫伏) */
|
||||
uint16_t volt = 0U;
|
||||
ret = sd2506_get_battery_voltage(&volt);
|
||||
SD2506_TEST_CHECK(ret == SD2506_OK, "sd2506_get_battery_voltage() ret=%d (expect 0)", ret);
|
||||
if (ret == SD2506_OK) {
|
||||
DBG_INFO(" battery: %u mV", (unsigned int)volt);
|
||||
SD2506_TEST_CHECK(volt > 2000U && volt < 5000U,
|
||||
"battery voltage plausible: %u mV", (unsigned int)volt);
|
||||
}
|
||||
|
||||
/* TC-RTC-013: 芯片 8 字节 ID */
|
||||
uint8_t id[8] = {0};
|
||||
ret = sd2506_get_id(id);
|
||||
SD2506_TEST_CHECK(ret == SD2506_OK, "sd2506_get_id() ret=%d (expect 0)", ret);
|
||||
if (ret == SD2506_OK) {
|
||||
DBG_INFO(" id: %02X%02X%02X%02X%02X%02X%02X%02X",
|
||||
id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7]);
|
||||
}
|
||||
|
||||
/* TC-RTC-014: 用户 SRAM 读写回环(addr=0, len=8) */
|
||||
uint8_t wbuf[8] = {0xA1U, 0xB2U, 0xC3U, 0xD4U, 0xE5U, 0xF6U, 0x07U, 0x18U};
|
||||
uint8_t rbuf[8] = {0};
|
||||
ret = sd2506_write_sram(0U, wbuf, 8U);
|
||||
SD2506_TEST_CHECK(ret == SD2506_OK, "sd2506_write_sram() ret=%d (expect 0)", ret);
|
||||
if (ret == SD2506_OK) {
|
||||
ret = sd2506_read_sram(0U, rbuf, 8U);
|
||||
SD2506_TEST_CHECK(ret == SD2506_OK, "sd2506_read_sram() ret=%d (expect 0)", ret);
|
||||
int sram_ok = (memcmp(wbuf, rbuf, 8U) == 0);
|
||||
SD2506_TEST_CHECK(sram_ok, "SRAM write==readback");
|
||||
}
|
||||
|
||||
/* TC-RTC-015: 报警设置 + 清除(验证 API 通路,不影响时间寄存器) */
|
||||
sd2506_time_t at;
|
||||
at.year = 2026; at.month = 8; at.day = 28; at.hour = 12; at.minute = 0; at.second = 30; at.week = 4;
|
||||
ret = sd2506_set_alarm(&at, (uint8_t)(SD2506_AL_EN_EAS | SD2506_AL_EN_EAMN));
|
||||
SD2506_TEST_CHECK(ret == SD2506_OK, "sd2506_set_alarm() ret=%d (expect 0)", ret);
|
||||
ret = sd2506_clear_alarm();
|
||||
SD2506_TEST_CHECK(ret == SD2506_OK, "sd2506_clear_alarm() ret=%d (expect 0)", ret);
|
||||
|
||||
SD2506_TEST_REPORT("Phase 2 API");
|
||||
}
|
||||
#endif /* ENABLE_RTC_API_TESTS */
|
||||
|
||||
/* ===================== 套件入口 ===================== */
|
||||
void sd2506_test_run(void)
|
||||
{
|
||||
@@ -122,6 +201,10 @@ void sd2506_test_run(void)
|
||||
sd2506_phase_basic();
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_RTC_API_TESTS
|
||||
sd2506_phase_api();
|
||||
#endif
|
||||
|
||||
/* 恢复原始时间(用公共 API,写保护逻辑已由 sd2506.c 正确处理) */
|
||||
if (have_orig) {
|
||||
int r = sd2506_set_time(&orig);
|
||||
|
||||
Reference in New Issue
Block a user