こんにちは皆、私のNFCプロジェクトのファームウェアの最後のセクションを終了しています。私は、NXPのMF0ULx1 MIFARE Ultralight EV1 - 非接触チケットICを使用するAD-740 NFCタグと通信しようとしています。私が使用しているNFCリーダーはNXPのCLRC663です。私はSPI上のPSOC5LPデバイスでNFCリーダーを制御しています。ISO/IEC 14443a CRC計算
あなたはすべての背景情報を持っているので、私は今質問します。
この場合、NXP Read Method私はCmdとAddrを長さ2バイトのCRCにエンコードする必要があります。私がリンクできるデータシートは、ISO/IEC 14443を参照しています。Googleでそれを検索すると、ウィキペディアのページに移動し、PDFの4つのセクションが表示されます。私はセクション4の伝送プロトコルセクションが必要であると仮定しています。唯一の問題は、このPDFが有料壁によってブロックされていることです。これは意図的なのですか?私はちょうど多項式を見て170 $のPDFを購入するから私を防ぐことができ、いくつかのコード例を発見したインターネット上での周りのScrounging
...
コード例1 - 私はコメントにソースリンクを投稿することができます。メインポストでそれをする担当者を持っていない。
// Calculate an ISO 14443a CRC. Code translated from the code in
// iso14443a_crc().
func ISO14443aCRC(data []byte) [2]byte {
crc := uint32(0x6363)
for _, bt := range data
{
bt ^= uint8(crc & 0xff)
bt ^= bt << 4
bt32 := uint32(bt)
crc = (crc >> 8)^(bt32 << 8)^(bt32 << 3)^(bt32 >> 4)
}
return [2]byte{byte(crc & 0xff), byte((crc >> 8) & 0xff)}
}
コード例2 - コメントにソースリンクを投稿することができます。メインポストでそれをする担当者を持っていない。私の最後の質問はこの情報のすべてと ...それを仮定しても安全だろうと
void iso14443a_crc(byte_t* pbtData, size_t szLen, byte_t* pbtCrc)
{
byte_t bt;
uint32_t wCrc = 0x6363;
do {
bt = *pbtData++;
bt = (bt^(byte_t)(wCrc & 0x00FF));
bt = (bt^(bt<<4));
wCrc = (wCrc >> 8)^((uint32_t)bt << 8)^((uint32_t)bt<<3)^((uint32_t)bt>>4);
} while (--szLen);
*pbtCrc++ = (byte_t) (wCrc & 0xFF);
*pbtCrc = (byte_t) ((wCrc >> 8) & 0xFF);
}
そして今:
CRC多項式である:0x6363
シード値0x00FF
視覚的表現が見られますhere
[MF0ULx1 Datahsheet](のhttp://キャッシュ。 nxp.com/documents/data_sheet/MF0ULX1.pdf?pspll=1) | [コード例1ソース](https:// github。com/fuzxxl/nfc/blob/master/dev/nfc/crc.go#L23) | [コード例2ソース](https://git.eleves.ens.fr/hackens/libnfc/blob/a78cae1c1505dec2c3e411a0592fcbc133c78644/src/lib/bitutils.c) – CDutko