You have a stack of blank tags and a reader. Now what? Reading is one thing. Writing—actually putting your own data onto those tags—that is where things get real.
Here is the thing. When people search how to read write data to RFID tag, they usually discover that writing is not just the reverse of reading. Different tag types, different memory structures, passwords, lock bits. Get it wrong and you can lock yourself out of a tag forever.
Let me walk through what reading and writing actually means and how to do it without bricking your tags.
First: Understand Tag Memory Structure
Before you can read or write anything, you need to know how the tag organizes data.
For UHF RAIN RFID tags (ISO 18000-6C):
Four memory banks :
Bank
Name
What It Stores
00
Reserved
Kill password and access password
01
EPC
Electronic Product Code—main identifier
10
TID
Tag Identifier—factory programmed, unique per tag
11
User
User memory—size varies by tag type
When you do a standard inventory, you are reading Bank 01 (EPC). To read or write user memory, you target Bank 11.
For HF Mifare Classic tags (13.56 MHz):
Memory is organized into sectors and blocks :
16 sectors on a 1K card (numbered 0 to 15)
Each sector has 4 blocks of 16 bytes
Total: 64 blocks, 1024 bytes
The last block of each sector (block 3, 7, 11, etc.) is the “sector trailer” containing access keys. The first block of sector 0 (block 0) holds manufacturer data and is read-only .
Important: Different cards have different numbers of sectors and blocks. Mifare 4K has 40 sectors. Always check the tag datasheet .
Method 1: Read Write UHF Tags with CYKEO SDK
The CYKEO SDK handles the low-level commands so you focus on data.
Python example for UHF tag read/write:
python
from cykeo_sdk import UHFReader
# Connect to reader
reader = UHFReader("192.168.1.100")
reader.connect()
# First, find a tag
def on_tag(tag):
print(f"Found tag EPC: {tag.epc}")
# ---- READ OPERATION ----# Read EPC bank (Bank 01)
epc_data = reader.read_tag_memory(
epc=tag.epc,
memory_bank="EPC", # or use 1
offset=2, # skip PC word
length=6 # read 6 words (12 bytes)
)
print(f"EPC: {epc_data.hex()}")
# Read user memory (Bank 11)
user_data = reader.read_tag_memory(
epc=tag.epc,
memory_bank="USER", # or use 3
offset=0, # start at word 0
length=8 # read 8 words (16 bytes)
)
if user_data:
print(f"User memory: {user_data.hex()}")
# ---- WRITE OPERATION ----# Prepare data to write (16 bytes of ASCII)
write_data = b"PROD-1234-5678 "
# Write to user memory
success = reader.write_tag_memory(
epc=tag.epc,
memory_bank="USER",
offset=0,
data=write_data
)
if success:
print("Write successful")
# Verify by reading back
verify = reader.read_tag_memory(tag.epc, "USER", 0, 8)
if verify == write_data:
print("Verification passed")
reader.on_tag_read = on_tag
reader.start_inventory(timeout=5)
Key parameters explained :
Offset: Start position in 16-bit words. For EPC bank, offset 2 skips the Protocol Control word
Length: Number of 16-bit words to read/write
Access password: Required if tag is password-protected (default often 00000000)
Method 2: Read Write HF Tags (Mifare) with MFRC522
For hobby projects with Raspberry Pi, the MFRC522 library is standard .
from mfrc522 import MFRC522
reader = MFRC522()
# Wait for card
(status, TagType) = reader.Request(reader.PICC_REQIDL)
(status, uid) = reader.Anticoll()
if status == reader.MI_OK:
print(f"UID: {uid}")
# Select the tag
reader.SelectTag(uid)
# Authenticate using default key
key = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
trailer_block = 11 # Sector 3 trailer
status = reader.Authenticate(reader.PICC_AUTHENT1A, trailer_block, key, uid)
if status == reader.MI_OK:
# ---- READ BLOCKS ----
block_nums = [8, 9, 10] # Sector 2 data blocks
data = []
for block_num in block_nums:
block_data = reader.ReadTag(block_num)
if block_data:
data += block_data
if data:
print("Read data:", ''.join(chr(i) for i in data))
# ---- WRITE BLOCKS ----
text = "PROD-12345"
# Pad to fill multiple blocks (16 bytes per block)
data = bytearray()
data.extend(bytearray(text.ljust(len(block_nums) * 16).encode('ascii')))
i = 0
for block_num in block_nums:
reader.WriteTag(block_num, data[(i*16):(i+1)*16])
i += 1
print("Write complete")
# Always stop authentication
reader.StopAuth()
Important: The first block of sector 0 (block 0) contains manufacturer data and is read-only. Trailer blocks (3,7,11,etc.) contain access keys—writing to them incorrectly can lock the sector permanently .
Method 3: Using CYKEO Configuration Software
Sometimes you don’t need to code. CYKEO Rfid Tag Manager handles read/write through a graphical interface.
Steps in CYKEO Tag Manager :
Connect reader and click “Inventory” to find tags
Select a tag from the list
Navigate to the memory bank tab you want (EPC, TID, USER)
For reading: Click “READ” to fetch current data
For writing:
Enter new data in hex or ASCII
Set offset and length if needed
Enter access password if required
Click “WRITE”
Verify by reading back
The software automatically handles the commands and shows raw hex data alongside ASCII interpretation.
Method 4: Read Write with Mobile Apps
CYKEO Scan App for Android and iOS supports full read/write operations :
Must authenticate to sector before reading/writing its blocks
Different keys can have different permissions (read-only, read-write)
Locking and Permalock
After writing, you can lock memory to prevent changes :
Locked: Cannot be overwritten, but can still be read
Permalocked: Lock status is permanent—cannot be changed
Read-protected: Some banks can be configured to block reads entirely
To lock user memory on UHF tags:
python
# Lock user memory (prevent future writes)
reader.lock_tag_memory(
epc=tag.epc,
memory_bank="USER",
lock_type="LOCK" # or "PERMALOCK"
)
Method 5: Raw Commands via Serial/TCP
If you’re working without an SDK, you can send ASCII commands directly .
For CYKEO readers:
text
# Inventory
#INV
# Read user memory (8 words starting at word 0)
#RD USER,0,8
# Write to user memory (data in hex)
#WR USER,0,8,A1B2C3D4E5F6A7B8
Connect via serial (COM port) or TCP (IP address + port 23) and send commands.
Real Example: Production Line Tag Encoding
Here is how a automotive parts supplier in Germany uses read/write:
The challenge: 10,000 engine parts per day need unique serial numbers and production data written at the assembly line.
The solution :
Blank tags arrive on pallets
At first station, CK-D8A embedded reader writes:
Part number to EPC bank
Unique serial number to user memory
Production date to user memory
At quality control, reader verifies data by reading back
Throughout production, readers update user memory with test results
Code snippet:
python
def encode_part(part_number, serial):
# Wait for tag
tag = reader.wait_for_tag(timeout=5)
# Write part number to EPC (bank 1)
epc_data = part_number.encode('ascii').ljust(12, b'\x00')
reader.write_tag_memory(tag.epc, "EPC", 2, epc_data)
# Write serial and date to user memory
user_data = serial.encode('ascii').ljust(8, b'\x00')
user_data += datetime.now().strftime("%Y%m%d").encode('ascii')
reader.write_tag_memory(tag.epc, "USER", 0, user_data.ljust(16, b'\x00'))
# Verify
verify = reader.read_tag_memory(tag.epc, "USER", 0, 8)
if verify == user_data.ljust(16, b'\x00'):
print(f"Tag {tag.epc} encoded successfully")
Common Problems and Solutions
Problem: Write command returns error
Tag may be locked or password-protected
Wrong memory bank specified
Offset + length exceeds tag memory
Tag too far from antenna
Problem: Can read but cannot write
Tag may be permanently locked
Access conditions restrict writing
Wrong authentication key
Problem: Data written but reads as garbage
Wrong data format (hex vs ASCII mismatch)
Wrong offset—data written to wrong location
Endianness issues—some systems expect reversed byte order
Problem: Mifare authentication fails
Using wrong key
Trying to write to trailer block
Card type not supported (Mifare DESFire requires different handling)
Problem: Writing works sometimes, fails others
Tag moving during write—must stay stationary
Interference from nearby metal
Low battery in handheld reader
Write Verification Always
Always read back after writing to confirm :
python
# Write
reader.write_tag_memory(epc, "USER", 0, data)
# Verify
verify = reader.read_tag_memory(epc, "USER", 0, len(data)//2)
if verify == data:
print("Write verified")
else:
print("Write failed or data mismatch")
Tips for Success
Start with a test tag—never write to production tags until you verify your code works
Know your tag specs—different tags have different memory sizes and structures
Handle authentication first—if a tag requires a password, provide it before read/write
Pad data appropriately—UHF writes are in 16-bit words; HF blocks are 16 bytes
Keep the tag stationary—moving during write can corrupt data
Document your data structure—what bytes mean what, so you can read it later
Test edge cases—what happens when data is too long? Too short? Wrong format?
The Bottom Line
How to read write data to RFID tag comes down to three things:
Understand your tag’s memory structure (banks for UHF, sectors for HF)
Authenticate if the tag is protected (passwords for UHF, keys for Mifare)
Target the right memory location with correct offset and length
Most failures happen because people treat all tags the same. A UHF tag is not a Mifare card. User memory is not EPC. Passwords matter.
Start with the CYKEO Tag Manager software to experiment safely. See what your tags can do. Then move to SDK for automation.
And when you get stuck—because everyone does—CYKEO support has seen every read/write problem there is. Call us with your tag type and what you are trying to do.
Need to program tags in your application? CYKEO offers SDKs for Python, Java, C# with full read/write support for UHF and HF tags. Contact our team for developer samples and documentation.
CYKEO Passive RFID Tags are made for wet and high-humidity environments where standard labels do not last. This rfid passive tag is often used around liquids, chemicals and temperature changes, providing stable reading distance and long data life for industrial tracking.
CYKEO CYKEO-PCB1504 Metal RFID Tags is a compact anti-metal UHF RFID solution built for direct mounting on metal surfaces. With stable 8-meter read range, Ucode-8 chip, and long data retention, this rfid metal tag fits tools, containers, automotive parts, and industrial asset tracking.
CYKEO CYKEO-PCB7020 On-Metal RFID Tags are designed for reliable tracking on steel and metal surfaces. Built with an FR4 epoxy body and industrial-grade chips, these On-Metal RFID Tags deliver stable performance, long data life, and chemical resistance, making them a dependable RFID anti-metal tag for harsh environments.
The CYKEO CYKEO-60-25 Anti-Metal RFID Tag is built for metal surfaces where standard tags fail. Designed for long-range performance, harsh environments, and stable data retention, this Anti-Metal RFID Tag is ideal for industrial assets, containers, and equipment tracking using on metal RFID tags.
The CYKEO RFID Laundry Tag is designed for long-term textile identification in harsh laundry environments. Built to withstand high heat, chemicals, and repeated washing, this RFID Laundry Tag delivers stable performance for hotels, hospitals, and industrial laundry operations using laundry rfid tags at scale.
The CYKEO CYKEO-125-7 RFID Book Tag is designed for reliable book and document tracking in libraries and archives. This RFID Book Tag delivers long read range, dense placement support, and stable performance on shelves, making it a practical rfid tag on books for library automation, file management, and archival systems.
CYKEO RFID tags in hospitals are designed for sterile environments where accuracy matters. These autoclavable RFID tags support long-term tracking of surgical tools, implants, and medications, helping hospitals improve visibility, compliance, and patient safety.
CYKEO RFID Cable Tie Tag is built for reliable identification on metal surfaces. This UHF RFID Cable Tie Tag is widely used in rfid tags for inventory systems, industrial asset management and Hospital RFID Tags, offering stable read performance, long service life and global EPC Gen2 compatibility.
CYKEO RFID Asset Tag is designed for stable identification of metal assets in industrial environments. This UHF RFID Asset Tag is commonly used for rfid tag asset tracking on equipment, tools and containers, providing reliable reads, long service life and ISO/IEC 18000-6C support.
CYKEO UHF RFID Card is designed for fast identification and long-term use in industrial and commercial systems. Supporting ISO 18000-6C, this UHF RFID Card works at 860–960 MHz and is suitable for custom RFID cards used in asset tracking, access control and inventory management.
CYKEO HF RFID Cards are designed for secure and stable access control systems. These 13.56 MHz RFID key cards support ISO 14443-A, reliable rewriting and long service life, making HF RFID Cards suitable for offices, campuses, events and membership management.
CYKEO UHF RFID Tag is designed for reliable tracking of metal jewelry and high-value items. This Jewelry RFID Tag supports long-range reading up to 8 meters, anti-counterfeit protection and stable performance on metal, making it suitable for retail, inventory control and asset management.
CYKEO Embedded RFID Modules are designed for compact industrial and IoT devices that require stable UHF performance. These UHF RFID Modules support global protocols, flexible power control, and reliable multi-tag reading for smart cabinets, production lines, and asset tracking systems.
CYKEO Embedded RFID Module is built for compact IoT and industrial devices that need stable UHF performance. This UHF module supports global protocols, low power operation, and reliable multi-tag reading for smart lockers, production lines, and always-on RFID systems.
CYKEO CYKEO-M1 drone rfid module is a compact UHF RFID reader module designed for drones and UAV platforms. It supports long-range aerial scanning, fast multi-tag reading, and stable performance in wind, vibration, and outdoor environments.
CYKEO CYKEO-M4 RC522 RFID Module is an industrial-grade UHF RFID reader with 4 ports, supporting ISO, EPC, and GB protocols. High-speed, accurate reading for IoT, automation, and warehouse applications.
CYKEO CYKEO-M8 Module RFID is an 8-port UHF R2000 RFID Module designed for high-density, multi-tag environments. Stable 33dBm output, ISO & GB protocol support, ideal for warehouses, factories, and automated systems.
CYKEO CYKEO-M16 RFID Module is a 16-port UHF RFID reader module based on the R2000 chipset. Designed for dense tag environments, it supports ISO and GB standards and delivers stable multi-antenna control for industrial automation.
The CYKEO CYKEO-M16L RFID Reader Module is a 16-channel UHF RFID core designed for dense tag environments. With adjustable 33dBm output, multi-protocol support, and stable multi-antenna control, this RFID Tag Reader Module fits industrial automation, warehouse systems, and large-scale IoT deployments.
CYKEO CYKEO-M8L module RFID is a compact industrial UHF module built for dense tag and multi-antenna environments. With 8 RF ports, adjustable 33 dBm output, and ISO & GB protocol support, it is widely used in factories, warehouses, and automated tracking systems.
CYKEOCYKEO-M4L UHF RFID Module is a compact 4-channel RFID tag reader module designed for dense tag environments. Supporting ISO and GB protocols, it delivers stable reads up to 10 meters for industrial and IoT systems.
Cykeo CYKEO-A11 UHF RFID reader antenna delivers 11dBi gain, 840-960MHz frequency range, and IP65 ruggedness for retail, logistics, and industrial RFID systems. Features low VSWR and easy installation.
CYKEO Antenna RFID Reader delivers stable long-range UHF performance with a 10.5dBi directional design, built for warehouses, conveyor portals, and industrial RFID systems. This rfid reader antenna provides 20m+ read distance and rugged IP67 protection.
Cykeo CYKEO-A5B industrial Linear RFID Antenna delivers 5dBi gain, ≤1.5:1 VSWR, and IP65 rugged design for warehouse, production line, and logistics UHF systems.
Cykeo’s CYKEO-B12 Long Range RFID Antenna delivers 15m+ read range with 12dBi gain, IP65 rugged design, and global 840-960MHz UHF support. Ideal for warehouse/logistics asset tracking.
Cykeo CYKEO-B10 Long Distance RFID Antenna offers 10dBi gain, 840-960MHz frequency range, IP65 rating, and 20m+ coverage for logistics/warehousing/ETC systems. Low VSWR ensures stable signal transmission.
Cykeo CYKEO-A6 UHF RFID panel antenna features 6dBi gain, 840-960MHz broadband, IP65 metal-ready housing for logistics/smart retail. 18mm ultra-thin design with tool-free mounting.
Cykeo CK-A3 industrial antenna RFID UHF offers 5m+ tag detection, ≤1.3:1 VSWR, IP65 rugged design, and global UHF spectrum compatibility (840-960MHz) for warehouses, factories, and retail.
Cykeo CYKEO-B5 directional RFID antenna provides 5dBi gain with 60° narrow beamwidth for precise inventory tracking. IP65-rated, global UHF frequency support, and low VSWR.
Create your own high-performance DIY RFID antenna! 5dBi gain, 840-960MHz tunable, step-by-step guides. Compatible with Arduino, Raspberry Pi, and commercial UHF readers.
Cykeo CYKEO-A7 Flexible RFID Antenna features 840-960MHz wideband tuning, 7dBi gain, and IP68 rating for medical/retail/industrial curved surface deployments. 98% read accuracy with peel-and-stick installation.
Cykeo CYKEO-B5A industrial Passive RFID Antenna delivers 5dBi gain, 70° beamwidth, and -40°C~55°C operation for warehouses/smart cabinets. Compatible with Zebra/Impinj readers.
Cykeo’s CYKEO-A9B High Gain RFID Antenna delivers 15m+ read range with 9dBi amplification. Features IP54 rugged design, 840-960MHz bandwidth, and 80° beamwidth for warehouse/manufacturing RFID systems.
Cykeo’s enterprise-grade 8dbi Impinj RFID Antenna 10m+ read range with 840-960MHz tuning. Features IP65 housing, 1.4 VSWR, 35° beamwidth for retail/warehouse RFID systems.
Cykeo CYKEO-A9 industrial UHF RFID antenna delivers 9dBi gain, 840-960MHz frequency range, and IP65 protection for warehouse/logistics/retail RFID systems. Features N-type connector and ≤1.3:1 VSWR.
CYKEO UHF RFID Antenna built for long-distance and industrial applications. This antenna rfid uhf delivers strong gain, outdoor durability, and reliable tag performance in warehouses, yards, and vehicle ID systems.
CYKEO Antenna RFID delivers reliable long-range UHF performance in warehouses, retail shelves, and cold-chain environments. This compact uhf rfid antenna provides stable reads with circular polarization and ultra-wide 840–960 MHz support, ideal for industrial tracking, smart shelves, and asset monitoring.
Cykeo’s CYKEO-C8 UHF RFID antennas delivers 8dBi gain, 840-960MHz full-band coverage, and IP65 ruggedness for manufacturing/warehouse RFID systems. Industrial RFID Antennas Features
Cykeo’s 8dBi UHF RFID antenna and reader kit delivers 10m+ range, 840-960MHz broadband, and IP65 ruggedness for factories, warehouses, and logistics. ISO 18000-6C & EPC Gen2 certified.
Cykeo’s CYKEO-A12C UHF Large RFID Antenna delivers 12dBi gain, 840-960MHz global frequency, IP65 ruggedness for logistics/warehousing/automotive. 40° beamwidth ensures stable 15m+ tag reads.
CYKEO Near Field RFID Antenna provides precise 5–30 cm reading for shelves, cabinets, and workstations. This compact rfid shelf antenna delivers stable short-range performance around metal and clutter, ideal for pharmacies, libraries, and electronics sorting.
Cykeo’s industrial long range RFID reader delivers 20-meter scanning, 500+ tags/sec speed, and IP67 waterproof design for automated warehouses, logistics, and harsh environment applications.
Cykeo’s CYKEO-RA6L industrial RFID long range reader features 20m read distance, 500 tags/sec speed, and IP67 protection. Ideal for warehouse automation, manufacturing WIP tracking, and smart logistics. Supports ISO 18000-6C/6B protocols.
CYKEO Long Range RFID Tag Reader built for outdoor and industrial operations. This Outdoor RFID Reader delivers 20m read distance, fast tag processing, and IP67 durability for wide-area tracking.
Cykeo CYKEO-RA12L industrial Long Range RFID Reader delivers 20m read range, 200+ tags/sec scanning, and IP67 protection for manufacturing/logistics applications. Supports ISO 18000-6C/GB protocols.
Discover the power of handheld UHF RFID readers with long-range scanning (3-10m), bulk tag reading, and rugged design—perfect for warehouses & logistics. Improve efficiency today!
Trying to use your iPhone for RFID? We answer "can you read RFID with iPhone" by explaining the limited NFC capability and its real-world business applications.
Discover why UHF fixed RFID readers are ideal for logistics tracking. Learn about long-range scanning, high-speed data capture, and warehouse automation benefits.
Discover how portable RFID scanners help retail stores perform faster inventory counts, reduce stock discrepancies, and improve real-time product visibility across shelves and backrooms.