TÀI LIỆU

Tài liệu tích hợp Reader RFID

Tài liệu toàn diện về thiết lập truyền thông nối tiếp, cấu hình anten, hoạt động mã hóa thẻ (EPC Gen2 / ISO 18000-6C) và quản lý nguồn. Bao gồm ví dụ triển khai đa anten và quét kiểm kê tốc độ cao.

Reader bring-up
NRN
Serial115200 8N1
ProtocolCRC16-CCITT
RF power0-33 dBm
Inventory700 tags/s
5APCWCATMIDLENDATACRC16

Thiết lập truyền thông nối tiếp

Đầu đọc RFID NRN protocol giao tiếp qua cổng serial (RS-232 hoặc USB-to-Serial). Cấu hình kết nối cần được thiết lập chính xác để đảm bảo truyền dữ liệu ổn định.

Để kết nối qua WebSerial API (trình duyệt), sử dụng Nextwaves Reader Connect tại app.nextwaves.com/reader. Ứng dụng này tự động phát hiện cổng COM và thiết lập tham số kết nối.

Baud rate115200
Data bits8
Stop bits1
ParityNone
TypeScript - WebSerial Connection
// Request serial port access
const port = await navigator.serial.requestPort();
await port.open({
  baudRate: 115200,
  dataBits: 8,
  stopBits: 1,
  parity: "none",
  flowControl: "none",
  bufferSize: 4096,
});

// Get reader/writer streams
const reader = port.readable.getReader();
const writer = port.writable.getWriter();
Python - PySerial Connection
import serial

port = serial.Serial(
    port="/dev/ttyUSB0",      # Linux/macOS
    # port="COM3",            # Windows
    baudrate=115200,
    bytesize=serial.EIGHTBITS,
    stopbits=serial.STOPBITS_ONE,
    parity=serial.PARITY_NONE,
    timeout=2.0,
)

# Flush buffers before communication
port.reset_input_buffer()
port.reset_output_buffer()

Cấu trúc khung giao thức Nextwaves NRN

Mỗi lệnh NRN protocol được đóng gói trong khung nhị phân bao gồm: Header (0x5A), PCW (Protocol Control Word), Category, MID (Message ID), Length, Data payload và CRC16-CCITT checksum.

TrườngKích thướcMô tả
Header
1 byte
Luôn là 0x5A. đánh dấu đầu khung
PCW
2 bytes
Cờ giao thức (phiên bản, địa chỉ)
Category
1 byte
Danh mục lệnh (0x00=Hệ thống, 0x01=Thiết bị, 0x02=RFID)
MID
1 byte
ID tin nhắn trong danh mục
Length
2 bytes
Độ dài payload tính bằng byte (big-endian)
Data
N bytes
Payload dành riêng cho lệnh
CRC16
2 bytes
Checksum CRC16-CCITT của các byte sau header

Ví dụ lệnh

QUERY_INFO - Query reader serial number and firmware
TX -> 5A 00 01 01 00 00 00 DC E5
       +----+ +------+ +----+ +----+ +------+ +------+
       | 5A | | 0001 | | 01 | | 00 | | 0000 | | DCE5 |
       +----+ +------+ +----+ +----+ +------+ +------+
        HDR     PCW    CAT   MID    LEN     CRC16
READ_EPC_TAG - Start continuous EPC tag inventory
TX -> 5A 00 01 02 10 00 00 04 5A
       HDR  PCW   CAT MID LEN   CRC16

Response notifications (PID 0x1231) contain:
  - Antenna ID (1 byte)
  - RSSI value (1 byte, raw ADC 0-255)
  - EPC data (12+ bytes)
  - Frequency channel index (1 byte)
STOP_INVENTORY - Stop running inventory scan
TX -> 5A 00 01 02 FF 00 00 88 5A
       HDR  PCW   CAT MID LEN   CRC16

Danh sách lệnh chính

LệnhMô tả
QUERY_INFO
0x0100
Truy vấn số serial và phiên bản firmware đầu đọc
QUERY_RFID_ABILITY
0x1000
Truy vấn khả năng RFID (phạm vi công suất, số anten)
READ_EPC_TAG
0x0210
Bắt đầu quét thẻ EPC liên tục
WRITE_EPC_TAG
0x0211
Ghi dữ liệu vào ngân hàng EPC của thẻ
STOP_INVENTORY
0x02FF
Dừng quét thẻ đang chạy
CONFIGURE_READER_POWER
0x0201
Cài đặt công suất phát (0-33 dBm mỗi anten)
CONFIGURE_ANTENNA_ENABLE
0x0203
Bật/tắt cổng anten (bitmask)
SET_WORKING_FREQUENCY
0x0205
Thiết lập tần số làm việc cụ thể
SET_FILTER_SETTINGS
0x0209
Cấu hình bộ lọc thẻ trùng lặp (theo thời gian)
BUZZER_SWITCH
0x011E
Điều khiển chế độ còi

Cấu hình anten

Đầu đọc RFID hỗ trợ lên đến 32 cổng anten. Mỗi cổng được bật hoặc tắt thông qua bitmask 4 byte. Anten được đánh số từ 1 đến 32, mỗi bit tương ứng với một cổng.

Bitmask anten

Bật anten 1-40F 00 00 00Binary 00001111 - ports 1, 2, 3, 4 on
Chỉ bật anten 1 & 305 00 00 00Binary 00000101 - ports 1 and 3 on
CONFIGURE_ANTENNA_ENABLE - Enable ports 1-4
TX -> 5A 00 01 02 03 00 04 0F 00 00 00 E1 EF
                              +-----------+
       Payload:               |0F 00 00 00| <- bitmask
                              +-----------+
       Bit 0 = ANT1, Bit 1 = ANT2, Bit 2 = ANT3, Bit 3 = ANT4
       0x0F = 0b00001111 -> all 4 ports enabled

Triển khai đa anten

Khi triển khai nhiều anten, cần cân nhắc phân cực (tuyến tính vs tròn), khoảng cách giữa các anten và vùng phủ sóng chồng lấn. Đầu đọc sẽ quét tuần tự qua các anten được bật, mỗi thẻ được báo cáo kèm ID anten để xác định vị trí.

Portal

Cửa Dock

2-4 anten mỗi cổng, phân cực tròn, công suất 30 dBm

Station

Băng chuyền

1-2 anten mỗi trạm, phân cực tuyến tính, 20-25 dBm

Shelf

Kệ bán lẻ

Anten trường gần, công suất thấp 15-20 dBm, mật độ cao

Mã hóa thẻ (EPC Gen2 / ISO 18000-6C)

UHF RFID tuân theo chuẩn EPC Gen2 (ISO 18000-6C). Mỗi thẻ có 4 ngân hàng bộ nhớ: Reserved (mật khẩu), EPC (96+ bit mã định danh), TID (chip ID không thay đổi) và User (dữ liệu tùy chỉnh).

Cấu trúc bộ nhớ thẻ

Ngân hàngIDKích thước điển hìnhSử dụng
Reserved
00
64 bits
Mật khẩu Kill (32b) + Mật khẩu Access (32b)
EPC
01
96-128 bits
SGTIN-96, SSCC-96 hoặc mã hóa tùy chỉnh
TID
10
96+ bits
ID nhà sản xuất chip (chỉ đọc, duy nhất)
User
11
0-512 bits
Dữ liệu dành riêng cho ứng dụng (tùy chip)

Ví dụ giải mã SGTIN-96

SGTIN-96 là mã hóa phổ biến nhất cho sản phẩm bán lẻ và chuỗi cung ứng. Chuyển đổi EPC hex 24 ký tự thành GTIN-14, số serial và GS1 Digital Link.

SGTIN-96 Decode - Example
EPC Hex: 3034257BF7194E4000001A85

Decoded:
  Header:         0x30 (SGTIN-96)
  Filter:         1 (Point-of-Sale)
  Partition:      5
  Company Prefix: 0614141
  Item Reference: 812345
  Serial:         6789
  GTIN-14:        80614141123458
  Digital Link:   https://id.gs1.org/01/80614141123458/21/6789
WRITE_EPC_TAG - Write EPC data to tag
// NRN protocol WRITE_EPC_TAG command
TX -> 5A 00 01 02 11 00 0C [EPC_DATA_12_BYTES] [CRC16]

// The reader will:
// 1. Select the tag in its field
// 2. Write the provided EPC data to Bank 01
// 3. Return success/failure notification

// Access password required if tag is locked:
TX -> 5A 00 01 02 11 00 10 [ACCESS_PWD_4B] [EPC_DATA_12B] [CRC16]

Sử dụng công cụ EPC Encoder trực tuyến tại /tools/tds-rfid-converter để mã hóa và giải mã SGTIN-96, SSCC-96, GRAI-96 trực tiếp trên trình duyệt.

Quản lý nguồn

Công suất phát của đầu đọc điều chỉnh được từ 0 đến 33 dBm cho mỗi cổng anten. Công suất cao hơn tăng khoảng cách đọc nhưng cũng tăng nhiễu và tiêu thụ điện.

CONFIGURE_READER_POWER - Set 30 dBm on all 4 ports
TX -> 5A 00 01 02 01 00 04 1E 1E 1E 1E 67 FE
                              +-----------+
       Payload:               |1E 1E 1E 1E|
                              +-----------+
       0x1E = 30 decimal = 30 dBm per port

Power guidelines:
  - 33 dBm - Maximum range (~10m), dock doors
  - 30 dBm - Standard range (~6-8m), general use
  - 25 dBm - Medium range (~3-5m), conveyor belts
  - 20 dBm - Short range (~1-2m), point-of-sale
  - 15 dBm - Near-field (~0.5m), shelf readers

Giám sát RSSI

Giá trị RSSI (Received Signal Strength Indicator) từ thẻ được báo cáo dưới dạng byte ADC thô (0-255). Sử dụng công thức chuyển đổi để có giá trị dBm chính xác.

Công thức chuyển đổidBm = -100 + round((raw x 70) / 255)
Raw 128 - Tốt-65 dBm
Raw 180 - Mạnh-51 dBm
Raw 220 - Xuất sắc-40 dBm

Quét kiểm kê tốc độ cao

Để quét kiểm kê tốc độ cao, cần cấu hình tần số làm việc, bộ lọc thẻ trùng lặp và chế độ quét liên tục. Đầu đọc hỗ trợ quét lên đến 700 thẻ/giây với cấu hình tối ưu.

Cấu hình tần số

Tần số UHF RFID hoạt động trong dải 920-925 MHz (Đông Nam Á), với bước nhảy 0.5 MHz. Mỗi kênh được đánh số từ 0 (920 MHz) đến 10 (925 MHz).

SET_WORKING_FREQUENCY - 6 channels (920-925 MHz)
TX -> 5A 00 01 02 05 00 06 00 02 04 06 08 0A C4 1B

Channel mapping (formula: 920.0 + index x 0.5 MHz):
  Ch 0  -> 920.0 MHz
  Ch 2  -> 921.0 MHz
  Ch 4  -> 922.0 MHz
  Ch 6  -> 923.0 MHz
  Ch 8  -> 924.0 MHz
  Ch 10 -> 925.0 MHz

Quy trình quét tối ưu

01

Cấu hình cổng anten và mức công suất

02

Thiết lập tần số (FHSS cho môi trường đông đúc)

03

Cấu hình bộ lọc trùng lặp (500ms-3000ms tùy trường hợp)

04

Gửi READ_EPC_TAG để bắt đầu quét liên tục

05

Xử lý thông báo thẻ (PID 0x1231) khi chúng đến

06

Gửi STOP_INVENTORY khi hoàn tất

Complete inventory flow - TypeScript
// 1. Enable antennas 1-4
await sendFrame("CONFIGURE_ANTENNA_ENABLE", [0x0F, 0x00, 0x00, 0x00]);

// 2. Set power to 30 dBm on all ports
await sendFrame("CONFIGURE_READER_POWER", [0x1E, 0x1E, 0x1E, 0x1E]);

// 3. Set working frequencies
await sendFrame("SET_WORKING_FREQUENCY", [0, 2, 4, 6, 8, 10]);

// 4. Set duplicate filter to 1000ms
await sendFrame("SET_FILTER_SETTINGS", [0x03, 0xE8]);

// 5. Start inventory
await sendFrame("READ_EPC_TAG");

// 6. Process tags...
reader.on("tag", (tag) => {
  const rssiDbm = -100 + Math.round((tag.rssi * 70) / 255);
  console.log(`EPC: ${tag.epc}, Ant: ${tag.antenna}, RSSI: ${rssiDbm} dBm`);
});

// 7. Stop when done
await sendFrame("STOP_INVENTORY");