บทความ RFID พร้อมตัวอย่างการต่อใช้งาน ตอนที่ 4 RFID Mifare

บทความ RFID พร้อมตัวอย่างการต่อใช้งาน

ตอนที่ 4 มาตรฐาน ISO14443 Type A หรือ Mifare

54

 RFID ชื่อเต็มๆ ก็คือ Radio Frequency Identification หรือการระบุข้อมูลสิ่งต่างๆ โดยใช้คลื่นความถี่วิทยุ ซึ่งพวกเราทุกคนคงจะคุ้นเคยกับระบบนี้เป็นอย่างดี เพราะว่า RFID ถูกนำเข้ามาใช้ในชีวิตประจำวันของเราอย่างหลากหลาย เพียงแต่ว่าเราจะรู้หรือไม่เท่านั้นเองว่าสิ่งเหล่านั้นใช้เทคโนโลยี RFID … ย้อนอ่านตอนที่ 1 ความรู้เบื้องต้นเกี่ยวกับ RFID

           จากตารางในบทความตอนที่ 1 (คลิกดูตาราง) จะเห็นว่า RFID ที่ขายในเว็บไซต์ของเรามี 3 ประเภท คือ
           1. มาตรฐาน ISO10536 หรือ RFID 125 KHz 
           2. มาตรฐาน ISO15693 หรือ ICODE
           3. มาตรฐาน ISO14443 Type A หรือ Mifare
           ในการเลือกใช้แต่ละมาตรฐานต้องคำนึงถึงว่าเครื่องอ่าน-เขียนรองรับมาตรฐานของการ์ดที่ใช้อยู่หรือไม่ เช่น เครื่องอ่าน-เขียนตามมาตรฐาน Mifare ไม่สามารถใช้ได้กับบัตร ICODE ถึงแม้ว่าจะใช้ย่านความถี่เดียวกัน คือ 13.56MHz แต่โปรโตคอลที่รับส่งข้อมูลแตกต่างกัน หากต้องการใช้ร่วมกันอาจเปลี่ยนไปใช้เครื่องอ่าน-เขียนที่รองรับหลายมาตรฐาน (Multi-Protocol) แทน เช่น Pi‐931‐X34CC จาก บจก. ซิลิคอน คราฟท์ เทคโนโลยี หรือ SL500F-USB Reader/Write จาก StrongLink Technology Co., Ltd.
3. มาตรฐาน ISO14443A หรือ Mifare เป็นมาตรฐาน RFID ที่ความถี่ 13.56 MHz
           เหมาะสำหรับงานต้องการเก็บข้อมูลไว้ที่บัตร มีระบบ Login ก่อนเขียนหรืออ่านข้อมูลที่บัตร
3.1. บัตร Mifare 1K 13.56MHz White Card Tag (รหัสสินค้า ERFC006)

55
56

   เช่นเดียวกับบัตร ICODE ก่อนที่เราจะใช้งาน RFID ประเภท Mifare จำเป็นจะต้องทราบถึงรายละเอียดของบัตรก่อนจึงจะสามารถใช้งานบัตรได้ถูกต้อง โครงสร้างข้อมูลของบัตร Mifare ขนาด 1 KByte มีดังนี้

57

จากภาพแสดงรูปแบบข้อมูลบนบัตร Mifare จะเห็นได้ว่า บัตรจะแบ่งข้อมูลออกเป็นเซ็คเตอร์ (Sector) ทั้งหมด 16 เซ็คเตอร์ (ตั้งแต่ 0 ถึง 15) ในแต่ละเซ็คเตอร์ประกอบด้วยชุดข้อมูล 4 บล็อค (Block) โดย บล็อคต่างๆ เก็บข้อมูลบนบัตรดังนี้
1. Sector 0 Block 0 เก็บข้อมูลของบัตรหรือค่า UID (Unique Identifier) ขนาด 16 บิต สามารถอ่านได้เพียงอย่างเดียวไม่สามารถเขียนได้

58

2. Block 0, 1, 2 ของทุกSector (ยกเว้น Sector 0 ที่ใช้ได้เฉพาะ Block 1,2) ใช้เก็บข้อมูลที่ผู้ใช้ต้องการเขียน-อ่านบัตร โดยบัตร Mifare ยังมีฟังชั่น Value Block เขียนข้อมูลลงไปเฉพาะ 4 ไบต์แรก (ไบต์ที่ 0-3) และ Backup ข้อมูลไว้ที่ไบต์ที่ 8-11 Invert ข้อมูลไว้ในไบต์ 4-7 เก็บข้อมูลตำแหน่ง (Address) ของ Block ขนาด 1 ไบต์ไว้ที่ไบต์ที่ 12 กับ 14 และ Invert ข้อมูลตำแหน่งไว้ที่ 13 กับ 15

ฟังก์ชั่น Value Block เหมาะสำหรับระบบที่ต้องการความเร็วในการอ่านเขียนข้อมูล ไม่ต้องการใช้ข้อมูลทั้ง Block ต้องการเพียงเขียน อ่าน เพิ่ม หรือลด และมีระบบป้องกันข้อมูล เหมาะสำหรับระบบคิดเงินในศูนย์อาหารระบบบัตรคูปอง

59

3. Block 3 ในแต่ละ Sector เก็บข้อมูลสิทธิ์การเข้าถึงข้อมูลใน Block นั้น ประกอบด้วย
        – Key A เก็บรหัสการเข้าถึงข้อมูลของบัตร เก็บไว้ที่ Block 3 Byte ที่ 0 – 5
        – Key B เก็บรหัสการเข้าถึงข้อมูลของบัตร เก็บไว้ที่ Block 3 Byte ที่ 11 – 15
        – Access Bits เป็นค่าที่ใช้กำหนดสิทธิ์ของ Key A และ Key B สามารถอ่าน/เขียน Block ไหนได้บ้าง ใน Sector นั้น เช่นผู้ใช้บัตรอาจกำหนดให้ ตนเองถือ Key A อยู่ซึ่ง กำหนดสิทธิ์ใน Access bits แล้วให้สามารถอ่านหรือเขียนข้อมูลได้ แต่ผู้ใช้ทั่วไปถือ Key B สามารถอ่านข้อมูลได้เพียงอย่างเดียว
3.2 เครื่องอ่าน RFID 13.56MHz Read/Write Mifare Module (UART TTL) (รหัสสินค้า EFDV030)

60
61
62

ขาที่ใช้งานบนโมดูล
        – ขาIO แสดงสถานะเมื่อมีบัตรทาบที่โมดูล โดยเมื่อมีบัตร ขา IO มีสถานะเป็น Low ในทางกลับกัน เมื่อไม่บัตร ขา IO จะมีสถานะเป็น High
        – ขา TX ขาส่งข้อมูล Serial 
        – ขา RX ขารับข้อมูล Serial
        – ขาไฟ VCC ใช้แรงดันที่ 4.5 – 5.5 V
        – ขากราวด์
        ไฟสถานะ LED State เป็น LED ที่ควบคุมโดยคำสั่งจากผู้ใช้ และ LED Tag In จะติดเมื่อมีบัตร Mifare มาทาบที่โมดูล

63

         สามารถกำหนดความเร็ว Serial ได้จาก R6 และ R7 ถ้าต้องกำหนด Baud rate เป็น 9600 ต้องลอย R ทั้ง 2 ตัว (เหมือนกับเครื่องอ่าน ICODE ในหัวข้อที่แล้ว) โดยปกติค่าเริ่มต้นตั้งมาที่ 115,200 คือบัดกรี R6 R7 มาจากโรงงาน
นอกจากนี้ยังสามารถเลือก RFID Mifare รุ่นอื่น ดังนี้ 
1. RFID 13.56MHz Read/Write Mifare Module (RS232) (รหัสสินค้า EFDV025)
เชื่อมต่อผ่านพอร์ต Serial (RS232) เหมาะสำหรับ ผู้ใช้ที่ต้องการเชื่อมต่อเข้ากับพอร์ต Serial (RS232) ของ PC หรืออุปกรณ์ที่เชื่อมต่อผ่าน Serial (RS232) ใช้คำสั่งเหมือนกับ EFDV030

64 1

2. RFID 13.56MHz Mifare Reader and Writer Module (RS232 with Case) (รหัสสินค้า EFDV107)
มีการเชื่อมต่อแบบ Serial (RS-232) ใช้ไฟจากพอร์ต PS/2 แต่ชุดคำสั่งจะไม่เหมือนกับ EFDV025, EFDV030 เหมาะสำหรับ ผู้ใช้ที่ต้องการเชื่อมต่อเข้ากับพอร์ต Serial (RS232) ของ PC การเขียนโปรแกรมติดต่อ จะใช้ SDK ของผู้ผลิต

65

3. RFID 13.56MHz Mifare Reader andWriter Module (USB with Case) (รหัสสินค้า EFDV108)

มีการเชื่อมต่อแบบ USB ใช้ไฟจากพอร์ต USB ชุดคำสั่งเหมือนกับ EFDV107 การเขียนโปรแกรมติดต่อ จะใช้ SDK ชุดเดียวกับ EFDV107 เหมาะสำหรับ ผู้ใช้ที่ต้องการเชื่อมต่อเข้ากับ PC ผ่านพอร์ต USB

66

4. 13.56MHz HF RFID Module USB Reader with case (รหัสสินค้า ERFI013)
เป็น RFID Module USB Reader คือ อ่านค่า ID หรือข้อมูลของบัตร Mifare ได้เท่านั้น ใช้ไฟจากพอร์ต USB เมื่อเชื่อมต่อกับ PC เครื่องจะเห็นอุปกรณ์เป็น USB HID Keyboard ผู้ใช้สามารถปรับแต่ Reader ได้ผ่านโปรแกรม เหมาะสำหรับผู้ใช้ที่ต้องการอ่าน ID หรือข้อมูลจากบัตรเท่านั้น โดยไม่ต้องเขียนโปรแกรม

67

5. Small Size RFID 13.56MHz Read/Write Mifare Module (UART TTL) (รหัสสินค้า EFDV045)

เป็นบอร์ด RFID Read/Write ขนาดเล็ก (38 × 38 mm) เชื่อมต่อผ่านพอร์ต Serial (LV) คือ 0- 3.3V ใช้ชุดคำสั่งเหมือนกับ EFDV030, EFDV025 เหมาะสำหรับผู้ใช้กับชิ้นงานขนาดเล็ก

68

6. RFID 13.56MHz Read/Write Mifare Module(I2C) (รหัสสินค้า EFDV046)

เป็นบอร์ด RFID Read/Write เชื่อมต่อผ่านพอร์ต I2C เหมาะสำหรับใช้กับไมโครคอนโทรเลอร์

69

ทดลองการใช้งาน
         

ให้ RFID 13.56MHz Read/Write Mifare Module (UART TTL) (EFDV030) เชื่อมต่อกับโปรแกรมทดสอบบน PC แต่บอร์ดไม่สามารถเชื่อมต่อกับ PC ได้โดยตรง ต้องต่อวงจรเพิ่มแปลงระดับสัญญาณเป็น Serial (RS-232) เข้า PC สำหรับพอร์ต Serial RS-232 หรือต่อกับ USB to Serial (TTL) ในการทดลองนี้เชื่อมต่อผ่าน USB to Serial ดังภาพ

70
71

           จากภาพแสดงการเชื่อมต่อบอร์ด RFID กับ USB to Serial โดยใช้ 4 เส้นคล้ายกับการต่อการทดลองที่แล้ว คือ
           1. ขาไฟ +5V ของ USB to Serial ต่อเข้ากับ ขา VCC ของบอร์ด RFID
           2. ขา GND ต่อร่วมกัน 
           3. ขา Tx USB to Serial ต่อเข้ากับขา Rx บอร์ด RFID
           4. ขา Rx USB to Serial ต่อเข้ากับขา Tx บอร์ด RFID 
           จากภาพเชื่อมต่อโมดูลเข้ากับ USB to Serial เมื่อดูที่ Device Manager จะแสดง USB to Serial ขึ้นมาพร้อมกับแสดงหมายเลขพอร์ต

72

ทดลองนำบัตร RFID Mifare ไปทาบบนโมดูล ไฟ LED Tag In จะติด ดังภาพ
1. เปิดโปรแกรม ThaiEasyEelec Mifare โดย download ได้ที่ link

73

2. เลือก Comport ให้ตรงกับที่เชื่อมต่ออยู่กับโมดูล กำหนด Baud rate ตรงกับโมดูล จากนั้นกดปุ่ม Connect

74

3. เมื่อปุ่ม Select Card เมื่อต้องทราบข้อมูลของบัตร

75
76

4. ก่อนจะใช้คำสั่งอ่านหรือเขียนข้อมูลบนบัตรได้นั้นต้อง Login บัตรก่อน โดยใช้ Key A หรือ Key B เป็นข้อมูลขนาด 6 ไบต์โดยค่าเริ่มต้นของทุกบัตรในทุก Sector ค่า Key A และ Key B เป็น FF FF FF FF FF FF

77
78

5. หลังจากที่ Login บัตรแล้วทดลองอ่านข้อมูลจากบัตรโดยเลือกโหมดอ่านเป็น Read Data Block กำหนด Block ที่ต้องการอ่าน จากนั้นกดปุ่ม Read ในตัวอย่างนี้เลือกอ่านที่ Sector 0 Block 0 ซึ่งคือข้อมูลของบัตร

79
80

6. ถ้าเลือกอ่านจาก Block อื่น เช่น Block 1 หรือ 2 ใน Sector 0 จะเห็นว่ายังไม่มีการเขียนข้อมูลลงไปก็จะได้ข้อมูลว่างๆ เป็น 00 ทั้งหมด

81
82

7. ทดลองเขียนข้อมูลลงไปที่บัตรโดยเลือกโหมดเป็น Write a data block กำหนด Block ที่ต้องการ (ควรเลือกเฉพาะส่วนที่เป็น Data Block ใน Sector นั้น) กำหนดข้อมูลในส่วน Data (HEX) จากนั้นกดปุ่ม Write ในตัวอย่างนี้ทดลองเขียนข้อมูลใน Sector 0 Block 1 เป็น 0xFF ทั้งหมด 16 ไบต์

83
84

8. ทดลองอ่านข้อมูลใน Sector 0 Block 1 อีกครั้ง จะเห็นว่าข้อมูลเป็นไปตามที่เขียนไว้

85

9. ทดลองโหมดการเขียนมูลในโหมด Write a Value block เลือก Block กำหนดข้อมูลใน Data (HEX) จากนั้นกดปุ่ม Write เมื่ออ่านข้อมูลกลับในโหมดเดียวกัน ข้อมูลจะเหมือนกับที่เขียนไปก่อนหน้านี้

86
87

10. ทดลองใช้คำสั่งเพิ่มค่าใน Block ที่กำหนด เลือกโหมดเป็น INCREMENT A VALUE BLOCK เลือก BLOCK ที่ต้องการ กำหนดข้อมูลใน Data (HEX) จากนั้นกด Write ในตัวอย่างนี้กำหนดข้อมูลเป็น 0x02 ทั้ง 4 ไบต์เมื่อทดลองอ่านค่ากลับจะเห็นได้ว่าค่าแต่ละไบต์เพิ่มขึ้นไปอีก 0x02 ในที่นี้อ่านได้ 0x03 (0x01 + 0x02)

88
89

11. ทดลองใช้คำสั่งลดค่า ใน Block ที่กำหนด เลือกโหมดเป็น DECREMENT A VALUE BLOCK เลือก BLOCK ที่ต้องการ กำหนดข้อมูลใน Data (HEX) จากนั้นกด Write ในตัวอย่างนี้กำหนดข้อมูลเป็น 0x02 ทั้ง 4 ไบต์เมื่อทดลองอ่านค่ากลับ จะเห็นได้ว่าค่าแต่ละไบต์ลดลงอีก 0x02 ในที่นี้อ่านได้ 0x01 (0x03 – 0x02)

90
91

12. ทดลองกำหนดค่า Key A ใหม่กำหนดค่าใน KEY(HEX) กด Write ในการทดลองนี้กำหนดเป็น 0x00 ทั้ง 6 ไบต์

92

เมื่อกลับไป Login ด้วย Key A รหัสเดิม จะไม่สามารถ Login ได้

93
94

แต่เมื่อใช้ Key A รหัสใหม่จึงจะสามารถ Login ได้สำเร็จ

95
96

13. การควบคุม LED State ให้ติดหรือดับสามารถกดปุ่ม LED ON กับ LED OFF

97
98 1

ทดลองเชื่อมต่อ Arduino กับโมดูล RFID Mifare 

99

 ต่อบอร์ด Arduino กับโมดูล RFID Mifare ผ่านขา Serial (TTL) ขาไฟ +5V และขากราวด์ GND โดยการทดลองนี้จะใช้ Library TEE_RFID_Mifare ให้ Unzip ไฟล์นำโฟลเดอร์ไปไว้ที่ .. Arduino\libraries ดังภาพ

100
101

 ทดสอบโดยเปิด Arduino IDE ขึ้นมา ไปที่ File > Examples > TEE_RFID_ICODE > RFID_Mifare_test จากนั้นกดปุ่ม Upload แล้วบอร์ดจะการทำงานผ่าน Serial Monitor (Download ที่นี่)