我是靠谱客的博主 苗条哈密瓜,最近开发中收集的这篇文章主要介绍18000-6C整理-入门query/CRC-5RFID标签使用常识整理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

关于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标签使用常识整理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部