Slider[Style1]

Style2

Style3[OneLeft]

Style3[OneRight]

Style4

Style5[ImagesOnly]

Style6

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน


Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

เป้นเรื่องที่ผมคากคั้นเอามานานกับการทำให้ RFID Reader ราคาถูกแบบในภาพ อ่าน Tag ให้ได้หลายๆ TAG
หลักการคร่าวๆ คือ ใน VB จะมีคำสั่ง Request ซึ่งมีการกำหนดค่าไว้ว่าจะให้อ่าน Tag แบบอ่านทั้งหทดเลยหรือว่าอ่านเฉพาะ Tag ที่ไม่ได้ Halt ไว้

วิธีในการทำให้อ่านได้หลายๆ Tag จากที่ลองมาคือ กำหนดการ Request ให้เป้นอ่านเฉพาะ Tag ที่ไม่ได้ Halt แล้วหลังจากการอ่านค่าเสร้จเราก้ใส่คำสั่ง Halt ลงไป คราวนี้ถ้ามี Tag หลายๆ อัน มันก้จะอ่านทีละ Tag และทำการ Halt หลังทำงานจนเสร็จ ผลคือ  Tag ก้จะถูก Halt ไปทีละอันๆ อย่างนี้เรื่อยๆ จนครบ

คราวนี้พอถึงการทดลองกับ RFID Reader จริงๆ มันได้ผลที่น่าแปลกใจคือ ผมลองเขียนดค้ดขึ้น 1 โปรแกรม เอามาทดสอบกับ RFID Reader ทั้งสองตัว ปรากฎว่าผลที่ได้ไม่เหมือนกันเลย

RFID Reader ที่ยืมจากอาจารย์ รุ่น SL500L-0802 (Mar’ 07)

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

===========================================================

RFID Reader ที่ซื้อจากเว็ย Acentech เมื่อปีก่อน รุ่น CR500LR-I061230 (Dec’ 06)

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน
Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน
เท่าที่ดูรุ่นก็พอจะเดาได้ว่าตัวไหนเก่า ตัวไหนใหม่
และผลจากการรันด้วยโปรแกรมเดียวกันคือ RFID Reader รุ่น SL500L อ่าน Tag ได้มากกว่า 3 Tag แบบสบายๆ จะวาง Tag Card ซ้อนกันทีเดียวมันก้ยังอ่านได้(ค่อนข้างแปลกใจ) แต่ในรุ่น CR500LR อ่าน 2 Tag ก็แทบจะไม่ไหว ถ้าวาง Tag ซ้อนกันก้จบเลย อ่านไม่ออกสักตัว

จริงๆแล้ว ผมก็นึกว่า RFID Reader ที่ใช้มาตรฐานเดียวกัน ภาาาเดียวกัน มันก้น่าจะเหมือนๆกันหมด แต่งานนี้ผมคงต้องมาคิดใหม่ซะแล้ว

ดูยังไงก็เหมือนกันจริงๆ ถ้าไม่นับเรื่อง Port USBKnow2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

แกะมาดูก็คล้ายๆกัน แต่วงจรจะมีแตกต่างไปบ้าง
Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกันKnow2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

เช้คสเปคดูก็รองรับมาตรฐานเดียวกัน

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

Know2pro RFID Project ตอนที่ 19 : RFID Reader หน้าตาเหมือนกัน แต่การเอาไปใช้งานจริงไม่เหมือนกัน

Know2pro RFID Project ตอนที่ 18 : บันทึกการทำงานกับ RFID ประจำเดือนมิถุนายน 2011


Know2pro RFID Project ตอนที่ 18 : บันทึกการทำงานกับ RFID ประจำเดือนมิถุนายน 2011

วันที่ 15

เอาโค้ดเดิมจาก KTG_VB03 มาลองปรับแต่ง function ต่างๆ ที่เห็นใน Datasheet พบว่าไม่ work เลย แก้ไป 2 ตัวคือ KTG_VB04 และ KTG_VB05

ลองมาแก้ใหม่ได้เป้น KTG_VB06 แต่ยังติดปัญหาว่าพอเอา RFID Reader สองตัวมาวางใกล้ๆกันแล้ววาง Tag ลงไป มันจะอ่านไม่ได้ แต่พอแยกกัน ก้ดันอ่านได้ซะงั้น

Know2pro RFID Project ตอนที่ 18 : บันทึกการทำงานกับ RFID ประจำเดือนมิถุนายน 2011

วันที่ 15 ช่วงบ่ายๆ

แก้ดค้ดงมอีกรอบ ได้เป็น KTG_VB07

จากไปเดียเดิมที่ว่าใช้ RFID ทำงานทีละชุดสลับกันไป ในโปรแกรมเราสั่งให้ Reader ทำงานสลับกันไปมาก้จริง แต่ว่าในการใช้คำสั่ง rf_ClosePort เป้นแค่การหยุดการติดต่อกับ Reader เท่านั้น แต่ตัว Reader ยังส่งคลื่น RF ออกมาจากตัวเครื่องอยู่

ทำให้เวลา Reader วางใกล้กันสองเครื่อง มันเลยอ่าน Tag ไม่ได้ เพราะคลื่นซ้อนกัน(น่าจะ) ดังนั้นก่อนจะใช้ rf_closeport เราก็ควรปิดหรือหยุดการส่งคลื่นของ Reader ตัวนั้นๆ ซะก่อน

คำสั่งคือ rf_antenna_sta(0,1) เปิดการทำงานของเสา Reader (Enable)
            rf_antenna_sta(0,0) ปิดการทำงานของเสา Reader (Disable)

พอใส่คำสั่งนี้แทรกลงไป ก้สามารถอ่าน Tag ได้ แม้ว่า Reader จะอยู่ใกล้กันก้ตาม

วันที่ 15 ช่วงดึก

ไฟล์ล่าสุดคือ KTG_VB08 ปรับปรุงจาก KTG_VB07 คือ เปลี่ยนการตั้งค่า Port จากเดิมที่ใส่เองในโค้ด  มาเป้นการใส่ผ่านเมนูการตั้งค่า คล้ายๆ เมนู Tool > Setup อะไรทำนองนั้น(ตอนนี้คิดได้แค่นี้)

ลองแล้วใช้ได้ แต่จะไม่มีการจำค่าเดิม เพราะไม่รุ้ว่าทำยังไง ตอนนี้ก็ลองใช้ไปก่อน

ใน KTG_VB07, KTG_VB08 ดูเหมือนจะมีปัญหาในการอ่าน Tag หลายๆ ตัวพร้อมกัน ตอนนี้เลยลองกลับมาแก้ KTG_VB03 ใหม่่ แล้วอัพเดตเป็น KTG_VB03.1 แทน (ตัวเก่า 3.0)
ปรับโค้ดให่อ่าน TAG ทีละ TAG แบบจับ TAG วางเอง

Know2pro RFID Project ตอนที่ 16 : บันทึกเรื่องคำสั่งการเขียนข้อมูลของ RFID Reader


301

บันทึกไว้เผื่อลืม เพราะตอนนี้ก้ยังงงๆ อยู่

การเขียนข้อมูลลง Tag Card (Mifare 1K 13.56MHz HF)

คำสั่งแรก ทำการตรวจเช็ค Key A และ Key B ก่อนการเขียนข้อมูลจริง

i = rf_M1_authentication2(0,b1,b3,buf1(0))

[IN] 0 คือ เลข icdev ของอุปกรณ์ปัจจุบันที่ติดต่ออยู่ใช้ค่า 0 (ศูนย์)
[IN] b1 คือ Cipher Key Validation Model (เลือกค่า Key ที่ใช้)
มี 0x60 คือ key A (ใช้ &H60)
   0x61 คือ key B (ใช้ &H61)
[IN] b3 คือ ตำแหน่ง Block ที่ต้องการเขียนมี 0-63 (จำนวนทั้งหมด 64 Block) เลือกเขียนได้ทีละ BLock เช่น 4 เป็นต้น

รูปประกอบถ่ายจากสมุดบันทึก

302

[IN] *pkey คือ Cipher Key Content ขนาด 6 byte น่าจะเอาไว้เข้ารหัสอะไรสักอย่าง

ต่อมาก็เริ่มเชียนข้อมุลลง Tag Card ด้วยคำสั่งนี้

i = rf_M1_write(0,b3,buf2(0))

0 คือ เลข icdev ของอุปกรณ์ปัจจุบันที่ติดต่ออยู่ใช้ค่า 0 (ศูนย์)
b3 คือ Block ที่ต้องการเขียนข้อมุล มีค่า 0-63 แต่ควรใช้ค่าตั้งแต่ 4 เป้นต้นไป เพราะจะได้ไม่ไปทับกับค่าที่มาจากโรงงาน
buf2(0) คือ ข้อมุลที่ต้องการเขียน *pData ทีค่า 16 byte ตรงนี้ก้ยังไม่รู้ที่มาว่ามาได้ยังไง

Know2pro RFID Project ตอนที่ 17 : ลืมนึกเรื่องขนาดของ RFID Tag ไปซะสนิท


Know2pro RFID Project ตอนที่ 17 : ลืมนึกเรื่องขนาดของ RFID Tag ไปซะสนิท

งานเข้าแบบไม่ได้ตั้งใจ อาจจะเพราะผมรีบ อยากลองของ เลยไปสั่งซื้อ Tag ตัวเล็กๆ ที่ว่ากันว่าใช้ติดกับตัวสินค้าได้ จริงๆ มันก้ตรงกับความต้องการของผมอยู่หรอกนะ แต่ว่าลืมคิดไปเรื่องหนึ่ง

ก้คือ RFID มันใช้คลื่น RF ในการทำงานนั่นก้คือ ต้องมีการเหนี่ยวนำสัญญ่ณที่ส่งออกมาจาก Reader และ Tag ก็เหมือนกับเสาอากาศ ถ้าขนาดใหญ่มันก้รับสัญญาณได้ดี แต่ถ้าเสาเล็กก็รับไม่ได้ดี

Tag ที่ผมซื้อมาก้เหมือนกัน ดันลืมคิดเรื่องนี้ พอส่งของมาถึง แกะกล่ิงออกก็นึกขึ้นมาได้ แต่กสายไปซะแล้ว งานนี้จัดไป 800 กว่ายาท เพราะ Tag จาก thaieastelec ตอนนั้นราคามันประมาณ 60 บาทแพงเอาการ

พอเอามาลอง ก้เป้นไปตามที่คิด ระยะการอ่านสั้นลงแทบจะเอาตัว Tag ติดกับ Reader เลยทีเดียว งานนี้เสียดายนิดหน่อย แต่ก็ได้บทเรียนที่ดีมา คราวหน้าจะได้ตั้งสติดีๆก่อนซื้อของ

เพิ่มเติมกับลายวงจรข้างใน Tag ที่ซื้อมา ส่องผ่านแสงไฟ จะเห็นเสาและตัว Chip IC เล็กๆ ด้วย

ส่วนขนาดก็ประมาณยางลบตราม้าก่อนนึง

Know2pro RFID Project ตอนที่ 17 : ลืมนึกเรื่องขนาดของ RFID Tag ไปซะสนิท

Know2pro RFID Project ตอนที่ 17 : ลืมนึกเรื่องขนาดของ RFID Tag ไปซะสนิท

Know2pro RFID Project ตอนที่ 15 : บันทึกสรุปความแตกต่างระหว่างมาตรฐาน Mifare และ I.Code ของ RFID


Know2pro RFID Project ตอนที่ 15 : บันทึกสรุปความแตกต่างระหว่างมาตรฐาน Mifare และ I.Code ของ RFID

บักทึกสรุปใจความที่เขียนไว้นานแล้ว เอาปรับปรุงใหม่นิดหน่อย เผื่อจะเป้นประโยชน์กับคนอื่นบ้าง

บันทึกสรุปความแตกต่างระหว่างมาตรฐาน Mifare และ I.Code ของ RFID

Mifare ตามาตรฐาน ISO 14443A
- หน่วยความจำมีหลายแบบ คือ Ultralight 512 Bits, Classic (แบบ Standard ทั่วไป) 1 K และ 4K หากเลือกแบบ 512 bits จะมีรูปแบบการจัดการหน่วยความจำแบบเดียวกับ I.Code
- Mifare Classic จะมีระบบรักษาความปลอดภัยของข้อมุลสุงกว่า I.Code และแบบ UltraLight โดยการใช้รหัส Key A/Key B และกำหนดการเข้าใช้งานด้วยการเข้ารหัสที่ AccessBit
- แยกหน่วยความจำออกเป็น Sector และ Block ทำให้แยกเก้บข้อมูลได้หลาย Application ในบัตรเดียวกันได้ ซึ่งแต่ละ Sector จะมีรหัส Key A/B ของตัวเอง
- ระยะการอ่านจะค่อนข้างใกล้(ขึ้นอยุ่กับขนาดของ RFID Reader ด้วย) คือ 0-5 cm แต่เสถียรกว่า I.Code ที่อ่านได้ไกลกว่า 0-100 cm
- ราคาถูกกว่ามาก เพราะนิยมใช้กันมาก
- อัตราการรับส่งข้อมูล 106 KBuad

I.Code ตามมาตรฐาน ISO15693
- มีหน่วยความจำให้เลือกใช้งานหลายแบบ 512, 1024, 2048 Bits และ Tags ที่ใช้ Chip ของ Infeneon จะมี 10K Bits แต่ราคาจะแพงกว่ามาก
- ระบบรักษาความปลอดภัยของข้อมูลจะใช้การป้องกันเพียงอ่านอย่างเดียว(Read Only) และ อ่าน/เขียน (Read/Write) ได้ ในแต่ละ Block เท่านั้น  หากกำหนดให้เป็น Read Only แล้วจะไม่สามารถกลับค่ามาเป็น Read/Write ได้อีก
- แยกหน่วยความจำออกเป็น Block ละ 4 Byte ซึ่งแต่ละ Block จะมีรหัส Lock ของแต่ละ Block
- ระยะการอ่าน 0-100 cm
- ราคราแพงเพราะใช้งานกันน้อยกว่า MiFare
- อัตราการส่งข้อมูล 53Kbit/Sec

คำศัพท์เฉพาะ
Bit Rate คือ จำนวน Bit ที่ช่องทางสามารถผ่านไปได้ภายใน 1 วินาที มีหน่วยเป้น bps (bit per second) หรืออัตราความเร็วการส่งผ่านข้อมูล

Data Rate คือ จำนวน Bit ของข้อมุลจริงที่ผ่านไปในช่องทาง Digital ปกติจะน้อยกว่า Bit Rate เนื่องจากจำนวน Bit ส่วนหนึ่งจะใช้ไปในส่วนหัว (Overhead) ของข่าวสารสำหรับการติดต่อระหว่างผู้ส่งและผู้รับ

Baud Rate คือ จำนวนสัญญาณ Digital หรือ Analog(ที่ถูกเปลี่ยนเป็น Digital แล้ว) ส่งผ่านไปใน Channel ภายใน 1 วินาทีมีหน่วยเป็น Buad per Second

Bit Rate = Baud Rate x Bit ใน 1 Baud 

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว


Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

กว่าจะหาช่วงเวลาทดลองได้ก้นานโข ตอนนี้พอมีเวลาแล้ว ก็จัดไปสักหน่อย

[บันทึกวันที่ 23-November-2010]
ทดลองวิธีการใช้ RFID Reader ต่อกัน 2 ตัว USB แล้วปรับโค้ดจากที่ได้มา ผลที่ได้คือ ใช้งานได้ แต่ยังไม่ได้ทดลองเรื่องระยะทางที่แน่นอนว่าได้เท่าไหร่ (ขอบเขตที่กำหนดไว้คือ 10 CM) และยังต้องออกแบบกล่อง การจัดวางตำแหน่งด้วย

ใช้ Timer ใน VB ทั้งหมด สามตัว

เขียนโค้ดติดต่อให้เป็น Function ชื่อ Connect_RFID_Reader ในโมดูลชื่อ mo_declare
และใช้ Timer ชื่อ Toker_Time เป็นตัวสลับ Port การติดต่อ Reader คล้ายๆกับการ Toggle ยกตัวอย่างเช่น สั่งให้ Toker_Time ทำงานทุกๆ 100 ms พอครบ 100 ms ก็จะทำงานเรียกให้ Reader Port 4 ทำงาน พอครบอีก 100 ms ก็สั่งให้ Reader Port 5 ทำงานสลับกันไปมาอย่างนี้เรื่อยๆ

วิธีนี้ได้มาจากโปรเจค RFID เก่า ของอาจารย์

และมี Timer ชื่อ Auto_Read เป้นตัวติดต่อกับ Tag แล้วเอาข้อมูลมาแสดงใน Data_Grid

ภาพที่ร่างเองคร่าวๆ ใช้เป้นไอเดียในครั้งต่อไป

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

ภาพปัญหาเรื่องสัญญาณ

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

Know2pro RFID Project ตอนที่ 14 : ได้เวลาลอง RFID Reader 2 ตัว

Know2pro RFID Project ตอนที่ 13 : ความท้าทายใหม่กับการเปลี่ยนมาใช้ RFID Reader 2 ตัว


Know2pro RFID Project ตอนที่ 13 : ความท้าทายใหม่กับการเปลี่ยนมาใช้ RFID Reader 2 ตัว
     หลังจากที่ทำให้เครื่องพอจะอ่าน เขียนได้บ้างแล้ว ปัญหาต่อไปคือ ระยะการอ่านที่ตอนเสนอโปรเจคแบบมึนๆ ในครั้งนั้นผมและเพื่อนจินตนาการเอาไว้ว่าน่าจะอ่านได้ในระยะตะกร้าร้าน 7-11 แต่พอคิดไปคิดมา เอาเป็นว่าทำเท่าที่ทำได้ไปก่อนละกัน

รายละเอียดเพิ่มเติม
- ทดสอบใช้งานโปรแกรม VB ติดต่อ RFID Reader 2 ตัวให้ทำงานร่วมกัน
- ใช้ Time Sharing ติดต่อพอร์ท USB
- คล้ายๆกับการเขียนโปรแกรม N ชุดตามจำนวน N เครื่อง

[บันทึกวันที่ 23-November-2010]
ทำระบบเพิ่มเติมในไฟล์ KTG_VB03/vbdemo2.vbp ที่ form ชื่อ frm_KTG001

ลองใช้งาน RFID Reader 2 ชุดแล้วเจอปัญหา Driver ใน XP และ Win7 รัน VB ไม่ได้
คือ เสียบ Reader ตัวใดตัวหนึ่งจะได้ Driver ชื่อ
“CP210X USB Composite Device”
แต่ถ้าเสียบ 2 ตัวจะได้
”CP2102 USB to UART Bridge Controller”

ปัญหาตอนนี้คือ Com Port หายไปไหนหว่า
พอมาลองใน Windows 7 ดันใช้ได้มี COm Port ออกมา
ก็เลยลองลง VB6 ใน Windows 7 ดู ลงเสร็จแล้ว Restart 1 ครั้ง

ลองใน Windows 7 ติดปัญหาเรื่อง Port เพราะลองรันโปรแกรมไปแล้ว ดันไม่เจอ Port เลยลองไปปรับค่า Bits per Second ใน Device Manager แล้วมาลองอีกที คราวนี้เจอพอร์ตแล้ว ได้เป็น COM4

โปรแกรมทดลองแล้วใช้ได้กับทั้ง 2 ตัว ลองเปลี่ยน COM ก็ยังใช้ได้

[บันทึกวันที่ 10-December-2010]
ลองติดต่อกับพี่เจมส์ที่รับทำโปรเจคที่กรุงเทพ
คุยกันแล้ว พี่เค้าบอกว่าใช้ RFID Reader 2 ตัวมาต่อด้วยกันไม่ได้ ต้องใช้แบบตัวเดียว แต่ราคาแพงมาก 30000 ขึ้นไป แพงโคตรๆ ถ้าจ้างให้ทำก็คิดไปอีก 30000 รวมแล้ว 60000 บาท ในใจคิดว่า พอเหอะ อย่าเลย
คอนเซปเดิมใช้ Reader 2 ตัว ทำงานด้วยกัน เพราะระยะทางในการอ่านเขียนแต่ละตัวไม่เท่ากัน แถมสั้นมากประมาณ 5 CM เลยกะว่าจะประกบคู่วางเอาไว้ขนานกัน

Know2pro RFID Project ตอนที่ 13 : ความท้าทายใหม่กับการเปลี่ยนมาใช้ RFID Reader 2 ตัว

[บันทึกวันที่ 11-December-2010]
ลองติดต่อกับพี่เจมส์ที่รับทำโปรเจคที่กรุงเทพ
ลองดูโค้ดอีกรอบ เจอส่วนที่น่าจะเป็นการติดต่อกับ Reader คือ icdev ที่เป็น parameter ของทุก function แต่ในโปรแกรมใส่ 0 เข้าไป ลองดูค่าอื่นแล้วไม่มีผลเลย

ใช้โปรแกรมที่แถมมากับแผ่น CD แล้วลองกดดู icdev ก็ได้ค่าเป็น 1112 ขึ้นไป เลยสงสัยว่าค่า icdev ที่ได้จากตรงนี้เอาไปใช้ในโปรแกรมได้หรือเปล่า ลองทดสอบดูก็ใช้ไม่ได้

ไฟล์ที่ทดลองอยุ่ใน KTG_VB04

สรุปคือ โค้ดที่เขียนเอง ใช้งานอะไรได้บ้าง
- หา Port เองอัตโนมัติ (ใช้การวนลูปง่ายๆ)
- อ่าน Tag แบบ Auto อันนี้ใช้ Timer ควบคุม
- ในการอ่าน 1 ครั้ง สามารถอ่าน TAG ได้มากกว่า 2 ชิ้น แต่อยู่กับการจัดวาง TAG ด้วย ถ้าทับกันมากๆ ก็อ่านไม่ได้
- ในการอ่าน 1 ครั้งจะอ่าน TAG แต่ละคัวแค่ครั้งเดียว ไม่มีการอ่านซ้ำ

Know2pro RFID Project ตอนที่ 12 : ขั้นตอนการติดต่อกับ Reader และคำสั่ง Halt คืออะไร

Know2pro RFID Project ตอนที่ 12 : ขั้นตอนการติดต่อกับ Reader และคำสั่ง Halt คืออะไร

ขั้นตอนหลักๆของการเขียนโปรแกรมติดต่อกับเครื่อง RFID Reader ส่วนนี้ผมได้ข้อมุลมาจาก Programmer มืออาชีพท่านหนึ่งครับ

1. POR (Power on Reset) เมื่อบัตรเข้ามาอยู่ในระยะ
2. ทำการ Request ติดต่อบัตร
3. ตรวจสอบ Anti-Collistion หรือเช็คว่ามี Tag กี่อันจะได้ไม่อ่านซ้ำ
4. Select Card เลือกการ์ดมาสักอัน เพื่อเอามาอ่านหรือเขียนข้อมูล
5. Authentication บัตรที่เลือกด้วย Key (password) ของมาตรฐาน RFID
6. ทำการอ่านหรือเขียนข้อมูล
7. Halt เพื่อที่จะไม่อ่าน Tag นั้นๆอีก เสร็จแล้วก็กลับไปรอ Tag ตัวใหม่ (ตัวเก่าจะไม่เอามาอ่านแล้ว)

Halt คือ การกำหนดสถานะของ Tag เพื่อให้หยุดทำงานชั่วคราว โดยการใช้ Function

rf_halt(0)

ค่า 0 (ศูนย์) คือ ค่า icdev เป็นค่าตายตัว

เมื่อใช้ function นี้แล้ว ตัว Reader จะอ่านค่าสถานะจาก Tag นั้นได้ว่าเป็น Halt และจะข้ามไปหา Tag ตัวอื่นๆแทน

แต่ถ้าเอา Tag ที่ Halt ออกจากระยะการอ่านของ Reader และใส่กลับเข้าไปใหม่ สถานะจะกลับไปเป็น Active เหมือนเดิมอีกครั้ง ดังนั้นการ Halt ทำได้แค่ชั่วคราวเท่านั้น

นอกจากนี้ ต้องกำหนดค่าใน function rf_request ใหม่ด้วย เพื่อให้สามารถอ่านสถานะ Halt ได้ วิธีกำหนดค่าคือ

rf_request(0,&H26,j)

ค่า 0 (ศุนย์) คือ ค่า icdev เป้นค่าตายตัว [INPUT]
ค่า &H26 คือ Mode [Input] ในการ Request มี 2 ค่าคือ
0x26 หรือ &H26 = Request non-halt cards ทำงานเฉพาะ Tag ที่ไม่เป็น Halt
0x52 หรือ &H52 = Request cards of All Status ทำงานกับ Tag ทุกสถานะ
ค่า j เป็นค่า pTagType [Output] หรือประเภทของ Tag ลองทดสอบแล้วได้ค่า 4
ซึ่งก็คือ 0x0400 = Mifare_one(S50)
สรุปคือ ได้ค่าออกมาเป็น 4 หมายถึง Request ไปแล้วได้ Tag ที่เป็นมาตรฐาน Mifare นั่นเอง

ที่คิดในตอนนี้คือ Tag ทุกตัวจะมี ID ไม่เหมือนกัน ถ้าเอามาใช้งานน่าจะให้ทำงานแค่ครั้งเดียวแล้ว Halt ไปเลย จาดนั้นก็ให้ Reader ทำการ Request Tag ตัวใหม่ วนไปแบบนี้เรื่อยๆ ก็จะได้วิธีการอ่าน Tag แบบไม่รู้จบ
แต่ต้องดุระยะการอ่านของ Reader ก่อนว่าจะทำได้หรือเปล่า

Know2pro RFID Project ตอนที่ 11 : บันทึกย้อนหลังการ(มั่ว)เขียนโปรแกรมติดต่อ RFID ด้วย Visual Basic 6

Know2pro RFID Project ตอนที่ 11 : บันทึกย้อนหลังการ(มั่ว)เขียนโปรแกรมติดต่อ RFID ด้วย Visual Basic 6

ว่ากันตามจริงแล้ว ผมไม่เคยเรียน VB มาก่อน หรือว่ามีใครสอนนะครับ จำได้ว่าเคยมั่วครั้งแรกตอน ปวส 2 พอมาเรียน ปตรี นึกว่าจะมีสอน แต่ก็ไม่มี งานนี้เลยต้องมานั่งศึกษาเองครับ และทั้งหมดก็คือ บันทึกทั้งหมดที่ผมได้มั่วๆเขียนโปรแกรมติดต่อกับ RFID

[24/7/2553]
เขียน VB6 ติดต่อกับ Port เองอัติโนมัติ
และใช้ Timer ใน VB ควบคุมเวลาในการทำงานกับ Tag เพราะเราต้องให้โปรแกรมทำงานตลอด เพื่อจะได้เช้คว่ามี Tag มาอยู่ในระบะการอ่านของตัว Reader หรือเปล่า
และใช้ Listview แสดงผล Tag ID และเวลาที่ Detect , ใส่ปุ่ม Clear ListView

**ไฟล์ทำงานล่าสุดอยู่ใน Folder KTG_VB และ Project VB คือ vbdemo2.vbp
Know2pro RFID Project ตอนที่ 11 : บันทึกย้อนหลังการ(มั่ว)เขียนโปรแกรมติดต่อ RFID ด้วย Visual Basic 6

[7/8/2553]
เพิ่มส่วนแสดงผลแบบ MS FlecGrid ให้ทำงานแบบเดียวกับ ListView ที่เคยทำมาก่อน
แต่เปลี่ยนให้แสดงผล 1 แถวต่อ 1 Tag ID หมายความว่าหากมี TagID ซ้ำเข้ามา โปรแกรมจะเพิ่มจำนวนให้อีก 1 ค่า
อาจารยืบอกว่าใช้เวลามีสินค้าซ้ำๆกัน แต่ผมเองก้ยังงงว่า Tag ID มันซ้ำกันได้ด้วยเหรอ

ปัญหาต่อไป คือ AntiCollistion เพราะตอนนี้ใช้ Timer อ่านค่ามาได้แค่ 2 Tag เท่านั้น

**ไฟล์ทำงานล่าสุดอยู่ใน Folder KTG_VB02 และ Project VB คือ vbdemo2.vbp

Know2pro RFID Project ตอนที่ 11 : บันทึกย้อนหลังการ(มั่ว)เขียนโปรแกรมติดต่อ RFID ด้วย Visual Basic 6

Know2pro RFID Project ตอนที่ 10 : รายละเอียดฟังก์ชั่นต่างของ RFID Reader (Visual Basic 6)

Know2pro RFID Project ตอนที่ 10 : รายละเอียดฟังก์ชั่นต่างของ RFID Reader (Visual Basic 6)

ข้อมุลทั้งหมดคัดลอกมาจากไฟล์ Demo Software-A.pdf ที่ได้มาตอนซื้อเครื่อง RFID จาก Acentech ครับ
ผมคัดลองเอาไว้เผื่อว่าไฟล์หายจะได้มีข้อมุลเก็บไว้
เท่าที่ทดลองมาบางบางคำสั่งก็ใช้ได้กับเครื่องบางรุ่นเท่านั้น และบางคำสั่งอาจจะไม่จำเป้นต้องใช้
เน้นนะครับว่าสำหรับ Visual Basic 6 เท่านั้น ส่วนภาษาอื่นผมไม่แน่ใจว่าใช้ฟังก์ชั่นแบบเดียวกันหรือเปล่า

== 2. รูปแบบชุดคำสั่งต่างๆใน DLL ฟังก์ชั่น ที่นำมาใช้งาน ==
2.1 System ฟังก์ชั่น
2.1.1 INT WINAPI LIB_VER
ฟังก์ชั่น: Get DLL Version
รูปแบบใช้งาน: int WINAPI lib_ver (unsigned int *pVer)
พารามิเตอร์: pVer: [OUT] DLL version
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.1.2 INT WINAPI RF_INIT_COM
คำอธิบาย: ใช้กำหนดค่าBaud Rate เพื่อรับส่งข้อมูลระหว่างเครื่องอ่านและคอมพิวเตอร์
โดยค่าปรกติเมื่อเสียบสายจ่ายไฟให้เครื่องอ่านBaud rateจะเท่ากับ19200 bps เสมอ
ฟังก์ชั่น: Connect
รูปแบบใช้งาน: int WINAPI rf_init_com (int port, long baud)
พารามิเตอร์: port: [IN] serial port number
baud: [IN] communication baud rate, 4800 ~ 115200 bps
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.1.3 INT WINAPI RF_CLOSEPORT
คำอธิบาย: ปิดพอร์ต หยุดการติดต่อกับเครื่องอ่าน
ฟังก์ชั่น: Disconnect
รูปแบบใช้งาน: int WINAPI rf_ClosePort(void)
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.1.4 INT WINAPI RF_INIT_DEVICE_NUMBER
คำอธิบาย: สำหรับตั้งหมายเลขประจำตัวของเครื่องอ่านในกรณีที่ระบบมีเครื่องอ่านจำนวน
มากเมื่อคอมพิวเตอร์ต้องการติดต่อกับเครื่องอ่านบางตัวเท่านั้น สามารถนำหมายเลขนี้มา
ใช้เพื่อระบุเครื่องอ่าน
ฟังก์ชั่น: Designate Device ID
รูปแบบใช้งาน: int WINAPI rf_init_device_number (unsigned short iddev)
พารามิเตอร์: iddev: [IN] Device ID
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.1.5 INT WINAPI RF_GET_DEVICE_NUMBER
คำอธิบาย: สำหรับอ่านค่าหมายเลขประจำตัวของเครื่องอ่าน กรณีนี้จะต้องต่อเครื่องอ่านที
ละตัวเพื่ออ่านค่าออกมาได้ถูกต้อง
ฟังก์ชั่น: Read Device ID
รูปแบบใช้งาน: int WINAPI rf_get_device_number (unsigned short *pIddev)
พารามิเตอร์: pIddev: [OUT] response Device ID
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.1.6 INT WINAPI RF_INIT_TYPE
คำอธิบาย: กรณีที่ใช้เครื่องอ่านรุ่นที่สามารถอ่าน/เขียนTagได้หลายมาตรฐาน สามารถใช้คำสั่งนี้กำหนดให้เครื่องอ่านใช้อ่านTagตามมาตรฐานใด
ฟังก์ชั่น: Set Reader contactless working mode
รูปแบบใช้งาน: int WINAPI rf_init_type(unsigned short iddev, unsigned char type)
พารามิเตอร์: iddev: [IN] Device ID
type: [IN] reader working mode
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง
หมายเหตุ: ฟังก์ชั่นนี้ไม่รองรับเครื่องอ่านที่อ่านได้เพียงโปรโตคอลเดียว
type = ‘A': set ISO14443A mode
type = ‘B': set ISO14443B mode
type = ‘1’: set ISO15693 mode

2.1.7 INT WINAPI RF_ANTENNA_STA
คำอธิบาย: สำหรับจัดการเปิดปิดเสาอากาศบนPCBที่ต่อกับเครื่องอ่าน
ฟังก์ชั่น: Manage RF Transmittal
รูปแบบใช้งาน: int WINAPI rf_antenna_sta (unsigned short iddev, unsigned char
model)
พารามิเตอร์: iddev: [IN] Device ID
model: [IN] transmittal state
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง
หมายเหตุ: model = 0: ปิดสัญญาณเสาอากาศ
model = 1: ปิดสัญญาณเสาอากาศ

2.1.8 INT WINAPI RF_LIGHT
คำอธิบาย: สำหรับสั่งเปิดปิดLEDในเครื่องอ่านใช้แสดงสัญญาณไฟสีต่างๆจำนวน3สีคือ
แดง, เขียว, เหลือง และปิด
ฟังก์ชั่น: Manage LED
รูปแบบใช้งาน: int WINAPI rf_light (unsigned short iddev, unsigned char color)
พารามิเตอร์: iddev: [IN] Device ID
color: [IN] 0 = off
1 = red
2 = green
3 = yellow
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.1.9 INT WINAPI RF_BEEP
คำอธิบาย: สำหรับสั่งให้Buzzerในเครื่องอ่านส่งสัญญาณเสียงออกมาเป็นเวลา10msec.
ฟังก์ชั่น: beep
รูปแบบใช้งาน: int WINAPI rf_beep (unsigned short iddev, unsigned char msec)
พารามิเตอร์: iddev: [IN] Device ID
msec: [IN] beep time, unit 10 MSEL
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.2 Mifare Standard Function
รวมฟังก์ชั่นที่ใช้กับ Reader และ Tag มาตรฐาน Mifare ISO14443A เท่านั้น

2.2.1 INT WINAPI RF_REQUEST
ฟังก์ชั่น: ReqA
รูปแบบใช้งาน: int WINAPI rf_request ( unsigned short iddev,
unsigned char model,
unsigned short *pTagType)
พารามิเตอร์: iddev: [IN] Device ID
model: [IN] REQ MODE
pTagType: [OUT] response data, chip type code
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง
หมายเหตุ: mode = 0x26: REQ_STD
mode = 0x52: REQ_ALL

2.2.2 INT WINAPI RF_ANTICOLL
ฟังก์ชั่น: Mifare card Anticollision
รูปแบบใช้งาน: int WINAPI rf_anticoll ( unsigned short iddev,
unsigned char bcnt,
unsigned char *pSnr,
unsigned char *pLen)
พารามิเตอร์: iddev: [IN] Device ID
bcnt: [IN] must be 4
pSnr: [OUT] response data from card, unique serial number
pLen: [OUT] length of response data
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.2.3 INT WINAPI RF_SELECT
ฟังก์ชั่น: Mifare card Selectting
รูปแบบใช้งาน: int WINAPI rf_select (unsigned short iddev,
unsigned char *pSnr,
unsigned char snrLen,
unsigned char *pSize)
พารามิเตอร์: iddev: [IN] Device ID
pSnr: [IN] card unique serial number
snrLen:[IN] length of pSnr
pSize: [OUT] response data from card, capacity code
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง
หมายเหตุ: บัตรMifare Type A ที่ถูกเลือกจะอยู่ในสถานะใช้งานหลังจากได้รับคำสั่งนี้

2.2.4 INT WINAPI RF_M1_AUTHENTICATION2
ฟังก์ชั่น: Mifare_Std Authentify
รูปแบบใช้งาน: int WINAPI rf_M1_authentication2 ( unsigned short iddev,
unsigned char model,
unsigned char block,
unsigned char *pKey)
พารามิเตอร์: iddev: [IN] Device ID
model: [IN] key validate mode
block: [IN] block absolute address
pKey: [IN] 6 bytes password
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง
หมายเหตุ : model = 0x60: via KeyA
model = 0x61: via KeyB

2.2.5 INT WINAPI RF_M1_READ
ฟังก์ชั่น: MifareOne Read
รูปแบบใช้งาน: int WINAPI rf_M1_read ( unsigned short iddev,
unsigned char block,
unsigned char *pData,
unsigned char *pLen)
พารามิเตอร์: iddev: [IN] Device ID
block: [IN] block absolute address
pData: [OUT] response data from card
pLen: [OUT] length of response data
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.2.6 INT WINAPI RF_M1_WRITE
ฟังก์ชั่น: Mifare_Std Write
รูปแบบใช้งาน: int WINAPI rf_M1_write (unsigned short iddev,
unsigned char block,
unsigned char *pData)
พารามิเตอร์: iddev: [IN] Device ID
block: [IN] block absolute address
pData: [IN] written data, 16 bytes
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.2.7 INT WINAPI RF_M1_INITVAL
ฟังก์ชั่น: Mifare_Std card Initialize Value
รูปแบบใช้งาน: int WINAPI rf_M1_initval ( unsigned short iddev, unsigned char block,
long value)
พารามิเตอร์: iddev: [IN] Device ID
block: [IN] block absolute address
pValue: [IN] initialize purse value at HEX format, low byte in former
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.2.8 INT WINAPI RF_M1_READVAL
ฟังก์ชั่น: Mifare_Std Read Value
รูปแบบใช้งาน: int WINAPI rf_M1_readval ( unsigned short iddev,unsigned char block,
long *pValue)
พารามิเตอร์: iddev: [IN] Device ID
block: [IN] block absolute address
pValue: [OUT] response value at HEX format, low byte in former
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.2.9 INT WINAPI RF_M1_INCREMENT
ฟังก์ชั่น: Mifare purse increment
รูปแบบใช้งาน: int WINAPI rf_M1_increment (unsigned short iddev,
unsigned char block,
long value)
พารามิเตอร์: iddev: [IN] Device ID
block: [IN] block absolute address
value: [IN] increase value at HEX format, low byte in former
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.2.10 INT WINAPI RF_M1_DECREMENT
ฟังก์ชั่น: Mifare purse decrement
รูปแบบใช้งาน: int WINAPI rf_M1_decrement (unsigned short iddev,
unsigned char block,
long value)
พารามิเตอร์: iddev: [IN] Device ID
block: [IN] block absolute address
value: [IN] decrease value at HEX format, low byte in former
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.2.11 INT WINAPI RF_M1_RESTORE
ฟังก์ชั่น: Mifare_Std Restore
รูปแบบใช้งาน: int WINAPI rf_M1_restore (unsigned short iddev,
unsigned char block)
พารามิเตอร์: iddev: [IN] Device ID
block: [IN] block absolute address
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง

2.2.12 INT WINAPI RF_M1_TRANSFER
ฟังก์ชั่น: Mifare_Std Transfer
รูปแบบใช้งาน: int WINAPI rf_M1_transfer (unsigned short iddev,
unsigned char block)
พารามิเตอร์: iddev: [IN] Device ID
block: [IN] block absolute address
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง
หมายเหตุ: ฟังก์ชั่นนี้จะทำงานหลังจากคำสั่ง increment, decrement และ restore

2.2.13 INT WINAPI RF_HALT
ฟังก์ชั่น: Mifare Halt
รูปแบบใช้งาน: int WINAPI rf_halt (unsigned short iddev)
พารามิเตอร์: iddev: [IN] Device ID
คืนค่า: คืนค่าเป็น 0 หากการทำงานถูกต้อง
หมายเหตุ: บัตรMifare Type A ที่อยู่ในระยะการทำงานของเครื่องอ่านจะถูกระงับการใช้
ชั่วคราวหลังจากได้รับคำสั่งนี้

Know2pro RFID Project ตอนที่ 9 : ต้นฉบับไฟล์โปรแกรมที่ใช้กับเครื่อง RFID

Picture026

รวมต้นฉบับไฟล์โปรแกรมภาษาต่างๆที่ใช้ในการเขียนกับเครื่องอ่าน RFID ที่ผมซื้อมา(แบบในรูป)

เครื่องที่ผมซื้อมาเป็นแบบ Mifare ครับ ใช้คุ่กับ Tag Mifare 1 k (ราคาถูก)

ซื้อมา 1 เครื่องจาก Acentech ราคา 3000 กว่าบาท

ส่วนอีกเครื่องตอนนี้ยังยืมอาจารย์ใช้อยู่ (ยืมมานาน)

ไฟลืทั้งหมดผมอัพขึ้น Skydrive ครับ ลองใน Dropbox แล้ว มันยุ่งยากมากๆ ใช้ Skydrive แทนดีกว่า

== ไฟล์จากเครื่อง RFID ที่ซื้อมาจาก Acentech ==

- ไฟล์ Demo Software-A.pdf เป็นคู่มือการใช้งาน software ตัวอย่าง มีข้อมุลฟังก์ชั่นเป็นภาษาไทยด้วย
- ไฟล์ USB Drivers.rar เป็นไฟล์ Driver ของเครื่อง RFID Reader ตัวนี้จำเป็นมาก
- ที่เหลือก็เป็นไฟล์ต้นฉบับตามภาษาต่างๆ มีอยู่ 3 ภาษาคือ Visual Basic 6, Visual Basic .Net, Visual C#.Net

== ไฟล์ Manual PDF ข้อมูล Tag และ Reader (Eng) ==
ใช้เป็นข้อมูลอ้างอิงการเขียนโปรแกรม จริงๆแล้วก็คล้ายๆกันหมด ต่างกันที่เลขรุ่นเท่านั้นเอง

== ไฟล์ต้นฉบับจากเครื่อง RFID ที่ยืมอาจารย์มา ==
- CR801.zip ไฟล์โปรแกรมที่ใช้กับ Reader รุ่น CR801 ถ้าจำไม่ผิด น่าจะเหมือนกับ Reader ที่ผมใช้
- I-CODE_SLI_Demo.zip ตัวอย่างโปรแกรมที่เขียนกับ Reader มาตรฐาน I-Code ไม่รู้เอามาทำไมเหมือนกัน เพราะของผมเป็นมาตรฐาน Mifare
- RFID Reader SL500 + Mifare 1k.zip อันนี้เกี่ยวแน่นอน เพราะเป็นไฟลืที่รวมเอกสาร sheet ไฟล์โปรแกรมต่างๆ ที่เกี่ยวกับเครื่อง RFID Reader รุ่น SL500
- RFID_C_TestCode.rar ไฟล์ภาษา C เห็นว่าใช้กับโปรแกรม Turbo C ผมเองก้ยังไม่เคยลองรันดูเลย
- RFREADER.zip ไฟล์ต้นฉบับทั้งหมด ของ Reader ที่ผมยืมอาจารย์มา
- UsbDriver.zip ไฟล์ไดรเวอร์เครื่อง RFID Reader อันเดียวกับที่ซื้อมาจาก Acentech
- RFHELP.CHM ไฟล์ข้อมุลการใช้งาน Function ของเครื่อง RFID Reader หลายๆรุ่น
- ICTransfer.zip เป็น Software ที่ใช้ทดสอบการทำงานของเครื่อง RFID Reader เบื้องต้น ผมเอาไว้เช็ตสเปคเครื่อง่าเป็นรุ่นอะไร อ่าน Tag แบบไหนได้บ้าง
- ไฟล์ที่ชื่อ Original_ เป้นไฟลืต้นฉบับของภาษาต่างๆที่ผมใช้เขียนโปรแกรม(แบบมั่วๆ) ตอนนี้เขียน VB6 เป้นหลัก เพราะง่ายดี

 

**ไฟล์ RFID ที่เกี่ยวข้องอื่นๆ**

ที่เหลือตอนนี้ก็แค่ลงมือเขียนโปรแกรม

Know2pro RFID Project ตอนที่ 8 : บันทึกข้อมูลเบื้องต้นของเครื่องอ่าน RFID (ย้อนหลัง)

Know2pro RFID Project ตอนที่ 8 : บันทึกข้อมูลเบื้องต้นของเครื่องอ่าน RFID (ย้อนหลัง)

บันทึกกันลืมในสมุดโน๊ต ช่วงประมาณเดือน กรกฎาคม 2553

RFID Reader ตัวที่ยืมมาจากอาจารย์ Project

รุ่น CR500(L) ใช้ datasheet อันเดียวกับรุ่น SL500L http://www.stronglink.cn/english/sl500.htm
Model : SL500L-0802
DLL : V5.0
RFID Reader Chip : MFRC500
รองรับมาตรฐานแบบ ISO14443A
Tag ที่รองรับ : SHC1102, Mifare_Ultralight, Mifare_StdS50 (Mifare_1k), Mifare_StdS70 (Mifare_4k)

SDK Software อยู่ในแผ่น CD ที่แถมมาด้วย , Copy ไว้แล้วใน RFREADER/EXAMPLE/VB
มีแต่โค้ดล้วนๆเป็น Project VB ที่เหลือ”งม”เอาเอง คู่มือไม่มีให้เลย

ไฟล์ Libraly ที่ใช้
- MasterRD.dll
- MasterRD.lib
- MasterCom.dll

Tag Mifare แบบ 1K
มี 16 sector (sector 0-15)
แต่ละ sector มี 4 block (block 0-3)
แต่ละ block มีขนาด 16 byte
เก็บข้อมูลได้ 10 ปี เขียนซ้ำได้ 100000 ครั้ง

Manufacturer Block
ที่ Block 0 sector 0 จะมีข้อมูล IC ของโรงงานที่ผลิต
เป็นข้อมูลเกี่ยวกับ Security และ System Requirement
BLock นี้จึงถูกตั้งเป็น “Write Protected” หลังจากถูกผลิตออกจากโรงงาน