UCchip UHF RFID产品资料

RFID系列选型手册:
UCCHIP UHF RFID Reader选型手册_v2.6.pdf (965.2 KB)

Windows上位机:
【固件2.2及以下版本建议使用----Reader_v1.76_8】
rfid_Reader_v1.76_8.zip (18.0 MB)

【固件2.3及以上版本建议使用----new_reader_v1.0.2】
new_reader_v1.0.2.zip (99.1 MB)

安卓Demo:
ucchip-rfid-sdk-v2.0.5.1.zip (6.2 MB)
串口协议:
UCChip UHF READER串口协议v1.2.2.pdf (1.2 MB)

Tip:使用or开发过程种遇到问题可随时在该帖下方留言

协议内,rssi,计算,里面的data[0]没看懂,哪来的,怎么找不到哪条指令可以返回rssi值呢

实时盘存的回复里面带的有RSSI 没有专门的指令去返回RSSI

rssi,到底怎么算的,c代码看不明白,能不能解释一下,公式是什么,和那四个字节的关系。

RSSI= B * log10(X) + C + D

那四个字节的值就是X 然后第一个字节的头3bit是mode

1 个赞

通过mode去确认B C的值

D值如何得到?文档内的公式是要用X除EPCLEN,RSSI怎么会和EPC长度有关系啊,要除吗?

D值默认是0 是一个偏移值 ,原始数据是需要除以epc长度然后再去计算的

在固件2.1的版本中,优化了射频参数保存逻辑,模块将不会默认自动保存射频参数设置,需要到版本信息中手动保存射频参数配置信息,操作流程如下:

上位机读写标签epc可以参考如下说明

601NC蜂鸣器控制原理图参考

RSSI C语言计算方法更新:

const uint8_t para_B[5][8] = {
{43,43,45,49,43,43,45,49},/UCM 601/
{43,43,45,49,43,43,45,49},/UCM 601C/
{43,43,45,49,43,43,45,49},/UCM 601B/
{53,53,48,43,49,45,43,43}, /UCM602/
{47,47,47,47,46,43,43,43} /UCM608/

};

const int para_C[5][8] = {
{43,43,45,49,43,43,45,49},/UCM 601/
{43,43,45,49,43,43,45,49},/UCM 601C/
{43,43,45,49,43,43,45,49},/UCM 601B/
{-283,-283,-283,-283,-283,-283,-283,-283}, /UCM602/
{-303,-283,-253,-238,-304,-313,-280,-266} /UCM608/
};

int general_func_file::Calculate_Rssi(char data,uint8_t len){

uint8_t rssi_mode = 0;
uint8_t hardware_mode = 0;
int B=0,C=0,D=0;
int RssiVal = 0;
uint8_t epc_len = 0;
float A = 1.0f;
float rssi_temp = 0.0f;
union{
uint32_t u32;
uint8_t chr[4];
}UNION;

epc_len = (len-3);
if(epc_len == 0){
epc_len = 1;
// //LOG(INFO) << “EPC len = 0 rssi error”;
}

rssi_mode = (data[0]&0xE0) >> 5;
hardware_mode = (data[0]&0x1E) >> 1;
UNION.chr[3] = data[0] & 0x01;
UNION.chr[2] = data[1];
UNION.chr[1] = data[2];
UNION.chr[0] = data[3];

B = para_B[hardware_mode][rssi_mode];
C = para_C[hardware_mode][rssi_mode];

rssi_temp = (UNION.u32/epc_len)*A;

RssiVal = (B * log10(rssi_temp)) + C + D;
if(RssiVal > 0 || RssiVal == 0){
// //LOG(INFO) << "rssi > 0 , original value is “<<int(UNION.u32)<<” mode is “<<int(rssi_mode)<<” hard mode is "<<int(hardware_mode);
RssiVal = -30;
}
else if(RssiVal < -90 || RssiVal == -90){
// //LOG(INFO) << "rssi > 0 , original value is “<<int(UNION.u32)<<” mode is “<<int(rssi_mode)<<” hard mode is "<<int(hardware_mode);
RssiVal = -90;
}

return RssiVal;
}

Q:通过单片机连接模组时,有时候会出现,有上电复位失败的问题,导致模组不能正常工作,串口命令无响应
A:模组上电时,需要保持外部引脚没有外灌电流,不然会导致上电复位异常。对于外部有单片机连接uart引脚的情况。有几种操作方式。
(1)通过修改外部单片机的引脚状态来规避。在对模组进行上电时,把与模组串口相连的单片机引脚设置为输出状态,并输出低电平。
(2)通过模组复位引脚进行复位,把模组的RESET脚拉低可以对模组进行硬复位。
(3)通过增加保护电路来防止电流倒灌,在模组串口的RX和TX上都加上二级管,起到阻断作用。一种参考接法如下图所示:


参考二:左边是UART_TX,右边是UART_RX,VDDA和VDDB分别是各自芯片的供电电源