概述
关于session
协议包括物理层和标签识别层
RFID标签使用常识整理
上面链接提到的
进制表述不准确,应该为下图:
一个字指16位 2字节
CW调制:等幅度连续波
RFID梳理
RFID知识点
CRC-5算不出来,可以自己写程序测试一下,参考程序
源代码:
/******************************************************************************
* Name: CRC-5/EPC x5+x3+1
* Poly: 0x09
* Init: 0x09
* Refin: False
* Refout: False
* Xorout: 0x00
* Note:
*****************************************************************************/
uint8_t crc5_epc(uint8_t *data, uint_len length)
{
uint8_t i;
uint8_t crc = 0x48; // Initial value: 0x48 = 0x09<<(8-5)
while(length--)
{
crc ^= *data++; // crc ^= *data; data++;
for ( i = 0; i < 8; i++ )
{
if ( crc & 0x80 )
crc = (crc << 1) ^ 0x48; // 0x48 = 0x09<<(8-5)
else
crc <<= 1;
}
}
return crc >> 3;
}
修改后代码:
#include <stdio.h>
#include <stdint.h>
uint8_t crc5Bitwise(uint16_t bits)
{
uint32_t a;
uint32_t crc;
uint32_t crc_n;
a = 0x00821200;//0x00821200 论文 ; CRC-5:0x08
crc = (0x09 << 19);
while(bits--)
{
crc_n = (crc << 1) & 0xFFFFFFFF;
crc_n ^= ((a ^ crc) & (1<<23)) ? (0x29 << (19)) : 0;
crc = crc_n;
a = (a << 1) & 0xFFFFFFFF;
}
crc >>= 19;
crc ^= 0x0000001F;
crc = ~crc;
crc &= 0x0000001F;
return (uint8_t)crc;
}
int main()
{
uint8_t test[4]={0x12,0x34,3,4}, value;
value = crc5Bitwise(17);
printf("crc输出结果为0x%.2x ",value);
return 0;
}
参考 手动计算
CRC-5始终算不到
找了个程序是国标的,它计算的CRC-5是RN16中的CRC-5,而不是query的CRC-5,国标和iso18000-6C定义的query不一样,如下图
RN16的产生和tag的EPC码,场的能力和传输速率有关
论文参考1 参考论文2 ISO18000各种协议 论文里面提到的伪代码
转换为C语言格式
uint8_t crc5Bitwise(uint16_t bits)//bits:17
{
uint32_t a;
uint32_t crc;
uint32_t crc_n;
a = 0x00821200;//数据(缺位补0):0x00821200 CRC-5:0x08
crc = (0x09 << 19);//5+19=24
while(bits--)
{
crc_n = (crc << 1) & 0xFFFFFFFF;
crc_n ^= ((a ^ crc) & (1<<23)) ? (0x29 << (19)) : 0;//0x29:0010 1001
crc = crc_n;
a = (a << 1) & 0xFFFFFFFF;
}
crc >>= 19;
crc ^= 0x0000001F;
crc = ~crc;
crc &= 0x0000001F;
return (uint8_t)crc;
}
最后
以上就是苗条哈密瓜为你收集整理的18000-6C整理-入门query/CRC-5RFID标签使用常识整理的全部内容,希望文章能够帮你解决18000-6C整理-入门query/CRC-5RFID标签使用常识整理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复