一、概述
本节记录下调试过程中遇到的问题。
二、异常发热
更换平台,飞线MCU开发板和原平台的si4463部分电路验证。上电后电流较大,从原来平台的20mA直接增加到90mA左右。 拆掉屏蔽壳,确定是PA器件在发热。查看硬件电路,分析是将GPIO0和SDN作为PA的控制管脚。根据WDS3的配置,GPIO0在发送期间为高(此时PA开启),其他时间为低(PA关闭)。 这样若si4463初始化失败,则GPIO输出电平是不可控的,为高则PA一直开启,功耗陡增。
2.1 初始化失败
在si446使用记录(一)一文中提到,发送指令后要读取CTS(0xFF)。初始化中以此来判断是否失败:
int8_t siWaitForCTS(void) {
uint8_t value_t = 0;
uint16_t cnt = 0;
while (value_t != 0xFF) {
clrCSPin();
siDelayUs(3);
siSendByte(0x44);
value_t = siReadByte();
siDelayUs(3);
setCSPin();
siDelayUs(1);
if (cnt++ > MAX_CTS_RETRY) {
rtt_print_log("si4463 init failed\n");
return -1;
}
}
return 0;
}
调试过程中发现,初始化执行完了,没有打印si4463 init failed,但实际并没有成功。 也就是说即使si4463没有正常响应,MCU也可能也会读到0xFF。所以并不能作为初始化成功与否的判断。
2.2 获取芯片版本
为了明确初始化结果,增加一个读取si4463版本信息的函数,正好也可以作为生产检测环节的一项。 在《AN625_Si446x API Descriptions.pdf》中查找,有3.2.2. PART_INFO、3.2.3. FUNC_INFO指令: 对应增加接口:
uint8_t si446x_Get_Part_Info(void)
{
uint8_t para_info[9];
memset(para_info, 0, sizeof(para_info));
abApi_Write[0] = 0x01;
siSendData(abApi_Write, 1);
siWaitForCTS();
siReadResp(para_info, 9);
siDelayUs(1);
si4463_debug("si446x_Get_Part_Info:");
for(uint8_t i = 0; i < 9; i++)
{
si4463_debug("%02x ", para_info[i]);
}
si4463_debug("\n");
if((para_info[2] != 0x44) && (para_info[3] != 0x63))
{
return 0xFF;
}
return 0;
}
uint8_t si446x_Get_Func_Info(void)
{
uint8_t func_info[7];
memset(func_info, 0, sizeof(func_info));
abApi_Write[0] = 0x10;
siSendData(abApi_Write, 1);
siWaitForCTS();
siReadResp(func_info, 7);
siDelayUs(1);
si4463_debug("si446x_Get_Func_Info:");
for(uint8_t i = 0; i < 7; i++)
{
si4463_debug("%02x ", func_info[i]);
}
si4463_debug("\n");
if((func_info[5] != 0x90) && (func_info[6] != 0x01))
{
return 0xFF;
}
return 0;
}
仿真结果: 00> si446x_Get_Part_Info:FF 22 44 63 00 86 00 00 06 00> si446x_Get_Part_Info:FF 06 00 02 CA 90 01
参考链接
在网上搜到了一篇文章:Silicon Labs无线收发芯片Si4463如何区分芯片版本号?,文中可以看到:
如果Si4463芯片丝印第一行字符为“44631B”,则芯片为B1版本;如果Si4463芯片丝印第一行字符为“44632A”,则芯片为C2版本; 通过CHIPREV或ROMID来判断Si4463芯片的版本号,如果读到的CHIPREV为0x11,或者ROMID为0x03,则Si4463芯片为B1版本;如果读到的CHIPREV为0x22,或者ROMID为0x06,则Si4463芯片为C2版本;
si446x_Get_Part_Info:FF 22 44 63 00 86 00 00 06 中第二个字节0x22,最后一个字节0x06,可以得到我用的是C2版本。 区分版本就是通过第三、四字节的PART + 最后一个字节的ROMID,表格说明如下:
三、始终无法接收
接收不稳定
【经验】仅需3步,轻松实现Si446x无线收发器的变长包收发 一个作为网关,轮询两个节点。节点1发送6个0x11,节点2发送62个0x22。从网关的log可以看到,节点1超出部分乱码 可以把不足62字节补填为0,
|