一、概述
本文主要跟大家分享 NJJ29C2 Wake up 功能配置流程,配置 Wake1 边缘检测将 NJJ29C2 从低功耗模式唤醒, 并配置唤醒后触发 TX1 进行低频数据传输。
二、配置流程
- CMD_CONFIG_DEVICE 命令配置设备信息,以配置 WUP1 为例,主要配置信息如下:
uint8_t cendricWakeDev[19] = {
0x48, 0x02, 0x04, 0x40, 0x21, 0x01, 0xD5, 0xFF, 0x10, 0x00, 0x00,
0xFF, 0x85, 0xFF, 0xFF, 0x0A, 0x00, 0x05, 0x05
};
/* starts PKE LF frame transmission at tx1(High Power Mode) with 1Ap */
/* HPDR mode TX1-TX2,config LOWPOWER2, Wake threshold and edge */
Cendric_CMD_CONFIG_DEVICE(1, cendricWakeDev, sizeof(cendricWakeDev));
① SYSCONFIG 字节中 LOWPOWER_SEL 配置为 0x1,选择 LOW_POWER2,使能内部 RC 振荡器,在低功耗模式下启用解码必须使用 LOW POWER2;
② WUPTHRES1 字节配置唤醒输入引脚的阈值, WUP1_THRES[1:0] 配置为 0x3,选择 80%;
③ WUPEDGESEL1 选择检测边沿,结合 WPI NJJ29C2 开发板原理图分析,默认被拉高,此处 WUP1 引脚选择下降沿检测,WUP1_EDGE_SEL[1:0] 配置为 0x2;
④ WUPDEB 中 T_DEBOUNCE[5:0] 配置检测到边沿后的反弹周期,此处配置为 5ms;
⑤ WUPVAL 中 T_VALIDATE[5:0] 配置验证周期的时间,此处配置为 5ms。
- CMD_CONFIG_ADVANCED 高级配置参考默认配置即可,此处不展开说明。
uint8_t cendricConfigAdvanced[6] = {
0x03, 0xBB, 0xB3, 0xE5, 0x15, 0xF2
};
/* This will bring the LF driver duty cycle closer to the target value of 40% */
Cendric_CMD_CONFIG_ADVANCED(1, cendricConfigAdvanced, sizeof(cendricConfigAdvanced));
- CMD_CONFIG_DRIVER 配置天线阻抗、驱动电流等信息,以下参数其中 TX1、TX3、TX4、TX6 为同一组天线参数,TX5 为另一组参数,根据需要配置,此处不展开说明。
uint8_t cendricConfigDrv[14] = {
0x2D, 0x02, 0x28, 0x44, 0xEE, 0x28, 0xF0,
0x00, 0x82, 0x28, 0x3F, 0xED, 0x28, 0xF0
};
/* set initial ZEFF = 10 Ohm, initial inductance value = 345uH */
Cendric_CMD_CONFIG_DRIVER(0, cendricConfigDrv, sizeof(cendricConfigDrv));
- CMD_START_STATIC_DIAG 命令启动 LF 的静态诊断;
/* Wake up device configuration */
uint8_t cendricStaticDiag[4] = {
0x01,0x01,0x00,0x00
};
/* starts the static diagnosis of the LF drivers */
Cendric_CMD_START_STATIC_DIAG(1, cendricStaticDiag, sizeof(cendricStaticDiag));
- CMD_GET_DEVICE_INFO 命令回收 RESP_STATIC_DIAG 信息。
/* get diagnostics information */
Cendric_CMD_GET_DEVICE_INFO(0, 0x03);
- CMD_START_LF_TRANSMIT_DATA 命令配置 TX1 天线阻抗学习。
uint8_t cendricImpLearningTX1[5] = { 0x04, 0x01, 0x20, 0x04, 0x05 };
Cendric_CMD_START_LF_TRANSMIT_DATA(1, cendricImpLearningTX1, sizeof(cendricImpLearningTX1));
- CMD_CONFIG_WUP_LF_TRANSMIT 首先将对应的低频传输 BUF 配置给 Wake up 引脚,下一步配置对应驱动发送以及对应 BUF 的数据帧,可根据需要进行修改。
uint8_t cendriWake_SEL_BUF[14] = {0x20,0x01,0x21,0x02,0x22,0x00,0x23,
0x00,0x24,0x00,0x25,0x00,0x26,0x00 };
uint8_t cendriWakeData_TX1[19] = {0x80,0x0C,0x01,0x40,0x00,0x3F,0x00,
0x00,0x00,0x00,0x02,0x01,0x50,0x74,0x04,0x01,0x20,0x02,0x6D};
/* WUPFEAT_SEL= 1, WUP_LF_BUF_NR1 -> WUP1, WUP_LF_BUF_NR2 -> WUP2 */
Cendric_CMD_CONFIG_WUP_LF_TRANSMIT(1, cendriWake_SEL_BUF, sizeof(cendriWake_SEL_BUF));
/* Set "WakeIDE + RSSI Command" to Wake1, TX1 */
Cendric_CMD_CONFIG_WUP_LF_TRANSMIT(0, cendriWakeData_TX1, sizeof(cendriWakeData_TX1));
三、清除标志,再次使能
完成前面的配置后,当 WUP1 接地被拉低后,则 NJJ29C2 从低功耗模式被唤醒,并触发 TX1 发送对应的数据帧,完成唤醒触发后 WUPSTAT(唤醒输入引脚状态标志位) 和 WUPLFSTAT(唤醒输入引脚触发的低频传输标志位)被置位,此时 NJJ29C2 通过 INT 信号通知基站通过 Cendric_CMD_NOP(0) 命令读取事件信息。
基站主控需通过 CMD_CLEAR_DEVICE_INFO 命令清除唤醒输入引脚的信息,包括唤醒输入引脚触发信息 WUPSTAT 和唤醒输入引脚触发的低频传输信息 WUPLFSTAT,再次使能低频传输即可,参考如下:
/* clear WUPSTAT and WUPLFSTAT */
uint8_t cendricClrWake_Flag[10] = {
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x01
};
//[8] CLRWUPSTAT 0x01 WUP1_STAT_CLR
//[9] CLRWUPLFSTAT 0x01 WUP1_LF_STAT_CLR
/* if wake up event trigger */
/* clear WUPSTAT and WUPLFSTAT */
if( (cendricRespData[17]!= 0) || (cendricRespData[18]!= 0) )
{
/* clear Device info */
Cendric_CMD_CLEAR_DEVICE_INFO(1, cendricClrWake_Flag , sizeof(cendricClrWake_Flag));
/* printf Log */
printf(" Clear WUPSTAT and WUPLFSTAT\n");
}
四、结语
以上就是本文的全部内容,唤醒输入引脚配置以及触发低频传输数据等配置可根据实际使用修改。
五、参考资料
评论