时钟测试完毕
This commit is contained in:
@@ -9,8 +9,7 @@ extern "C" {
|
||||
|
||||
/* ============ Phase 使能开关(取消注释即启用,默认全开) ============ */
|
||||
#define ENABLE_RTC_BASIC_TESTS /* Phase 1: 基本读写 / 走时 */
|
||||
#define ENABLE_RTC_WRTC_PROBE_TESTS /* Phase 2: WRTC 解锁时序探测(定位正确时序) */
|
||||
#define ENABLE_RTC_PERSIST_TESTS /* Phase 3: 跨重启持久化 */
|
||||
#define ENABLE_RTC_API_TESTS /* Phase 2: 全功能 API 覆盖(BCD互转/温度/电压/ID/SRAM/报警) */
|
||||
|
||||
/* ============ 测试统计(与 STORAGE/GD5F 套件一致的独立统计) ============ */
|
||||
typedef struct {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -26,7 +26,7 @@ extern "C" {
|
||||
//#define TEST_SUITE_CH395F
|
||||
//#define TEST_SUITE_STORAGE
|
||||
//#define TEST_SUITE_GD5F
|
||||
#define TEST_SUITE_RTC
|
||||
//#define TEST_SUITE_RTC
|
||||
|
||||
#if defined(TEST_SUITE_CH395F) + defined(TEST_SUITE_STORAGE) + defined(TEST_SUITE_GD5F) + defined(TEST_SUITE_RTC) > 1
|
||||
#error "测试套件互斥:一次构建只能启用一个 TEST_SUITE_*"
|
||||
|
||||
Reference in New Issue
Block a user