İndir - İstanbul Yazılım
Transkript
İndir - İstanbul Yazılım
2012 Mifare Kart Yazıcı/Okuyucu Modül (MFM-200) İstanbul Yazılım ve Elektronik Teknolojileri 01.01.2012 MFM-200 Mifare Kart Yazıcı/Okuyucu Modül Genel Özellikler Ürün Kodu MFM-200 Protokol ISO14443A, ISO15693 Kart Tipleri Mifare Classic 1K, Mifare Classic 4K Haberleşme Bağlantısı TTL UART TX, RX (RS232) Seri İletişim Parametreleri Parite None Data Bit 8 Stop Bit 1 Baudrate 9600, 19200, 38400, 57600, 115200 bps Sinyaller Reset# Bu pinden (-) sinyal verilirse modül resetlenir. IO_5 (-) sinyal verilirse baudrate 9600 seçilmiş olur. IO_4 (-) sinyal verilirse baudrate 19200 seçilmiş olur. IO_3 (-) sinyal verilirse baudrate 38400 seçilmiş olur. IO_2 (-) sinyal verilirse baudrate 57600 seçilmiş olur. IO_1 (-) sinyal verilirse baudrate 115200 seçilmiş olur. Boy ve Ağırlık Boy 42(W)x32(H)mm Ağırlık - Çalışma Çalışma Voltajı 5V Güç Tüketimi 60mA Sıcaklık -40 / 85°C Pin Bağlantı Şeması: Açıklamalar: - Mifare Classic 1K ve Mifare Classic 4K kart bloklarını okumak ve yazmak için kullanılır. - Bir RS232 ara devresi ile PC`ye bağlayıp kullanabileceğiniz gibi kendi devrelerinize gömerekte kullanabilirsiniz. - Oldukça basit olan komut seti sayesinde kart okuma/yazma işlemlerinin hızlı ve kolay bir şekilde yapılmasını sağlar. Haberleşme Formatı: STX Length Command Data ETX Checksum 2 byte 1 byte 1 byte n byte 1 byte 1 byte Tablo 1 - Haberleşme Paketi Byte Dizilimi STX Length Command Data ETX Checksum : Başlama işareti. : Paket uzunluğu. STX ve Checksum dahil tüm byte`ların toplamı. : Yapılacak işlemi bildiren komut. : n bayt uzunluğundaki veri. : Son byte işareti. : STX ile ETX arasındaki tüm baytların toplamının son(LSB) baytı. Komut Seti: Kod Komut Açıklama 0x01 Read Tag Info Tag Id`sini okur. 0x02 Load Key Load_Key komutu. 0x03 Read Block Tag`dan 1 blok(16 byte) okur. 0x04 Write Block Belirtilen bloğa 16 byte yazar. 0x80 STX Error Start byte`ı hatalı. 0x81 Length Error Paket uzunluğu hatalı. 0x82 Command Error Komut hatası. 0x83 ETX Error Son byte hatalı. 0x84 Checksum Error Kontrol byte`ı hatalı. 0x85 Read Block Error Blok okunamadı. 0x86 Write Block Error Blok yazılamadı. 0x87 No Tag İşlem yapılacak bir tag bulunamadı. Tablo 2 - Komut Seti Tag Tipleri: typedef enum { TagNone = 0, TagUltraLight = 1, Tag1K = 2, Tag4K = 3, TagDesFire = 4 } TagType; Tablo 3 - Tag Tipi Read Tag Info - 0x01 Bu komut, tag tipini ve id`sini okur. Tag tipleri için Tablo 3`e bakınız. Komut: Command 0x01 Length 6 byte - Paket uzunluğu Tablo 4 - Read Tag Info Yanıt: Response Command 0x01 Length 11 byte - Paket uzunluğu Tag Type 1 byte - Tag tipi. (Tag tipleri için Tablo 3`e bakınız.) Tag Id 4 byte - İlk bayt MSB bayttır. Tablo 5 - Read Tag Info komutuna yanıt Örnek: Komut Yanıt : 01 02 06 01 03 0D STX Length Command Data ETX Checksum 01 02 06 01 - 03 0D : 01 02 0B 01 02 6C C6 AB 0A 03 FB STX Length Command Data ETX Checksum 01 02 0B 01 02 6C C6 AB 0A 03 FB Load Key - 0x02 Bu komut, tag blokları ile işlem yapabilmek için kullanılan Key A veya Key B anahtar baytlarını cihaza yükler. Modülün varsayılan key baytları 0xFF FF FF FF FF FF`dir ve kimlik doğrulama (authentication) için Key A kullanır. Komut: Command 0x02 Length 13 byte - Paket uzunluğu. Key Tipi 1 byte 0x60 = Key A 0x61 = Key B Key Bytes 6 byte - Key byte`ları. Tablo 6 - Load Key Yanıt: Response Command 0x02 Length 6 byte - Paket uzunluğu. Tablo 7 - Load Key komutuna yanıt Örnek: Komut Yanıt 01 02 0D 02 60 A0 A1 A2 A3 A4 A5 03 44 STX Length Command Data ETX Checksum 01 02 0D 02 60 A0 A1 A2 A3 A4 A5 03 44 : 01 02 06 02 03 0E STX Length Command Data ETX Checksum 01 02 06 02 - 03 0E Read Block - 0x03 Bu komut, tag bloklarını okumak için kullanılır. Okuma işleminden sonra 16 baytlık blok verisi tag`den yüklenir. Komut: Command 0x03 Length 7 byte - Paket uzunluğu. Block No 1 byte - Okunacak olan blok nosu. Tablo 8 - Read Block Yanıt: Response Command 0x03 Length 23 byte - Paket uzunluğu. Block No 1 byte - Okunan blok no. Block Data 16 byte - Blok verisi. Tablo 9 - Read Block komutuna yanıt Örnek: Komut Yanıt : 01 02 07 03 01 03 11 STX Length Command Data ETX Checksum 01 02 07 03 01 03 11 : 01 02 17 03 01 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 03 99 STX Length Command Data ETX Checksum 01 02 17 03 01 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 03 99 Write Block - 0x04 Bu komut, tag bloklarına yazmak için kullanılır. Komut: Command 0x04 Length 23 byte - Paket uzunluğu. Block No 1 byte - Yazılacak olan blok nosu. Block Data 16 byte - Blok içine yazılacak olan veri. Tablo 10 - Write Block Yanıt: Response Command 0x04 Length 7 byte - Paket uzunluğu. Block No 1 byte - Yazılan blok no. Tablo 11 - Write Block komutuna yanıt Örnek: Komut Yanıt : 01 02 17 04 01 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 03 9A STX Length Command Data ETX Checksum 01 02 17 04 01 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 03 9A : 01 02 07 04 01 03 12 STX Length Command Data ETX Checksum 01 02 07 04 01 03 12 Örnek Kod: Test.H /* İşaret baytları */ #define STX #define ETX 0x0102 0x03 // Start baytı. // Stop baytı. 0x01 0x02 0x03 0x04 // // // // Tag Id`sini okur. Load_Key komutu. Tag`dan 1 blok(16 byte) okur. Belirtilen bloğa 16 byte yazar. // // // // // // // // Start byte`ı hatalı. Paket uzunluğu hatalı. Komut hatası. Son byte hatalı. Checksum hatalı. Blok okunamadı. Blok yazılamadı. İşlem yapılacak bir tag bulunamadı. /* Komutlar */ #define #define #define #define CMD_READ_TAG_INFO CMD_LOAD_KEY CMD_READ_BLOCK CMD_WRITE_BLOCK /* Modülden gelen hata komutları */ #define #define #define #define #define #define #define #define CMD_STX_ERROR CMD_LENGTH_ERROR CMD_COMMAND_ERROR CMD_ETX_ERROR CMD_CHECKSUM_ERROR CMD_READ_BLOCK_ERROR CMD_WRITE_BLOCK_ERROR CMD_NO_TAG 0x80 0x81 0x82 0x83 0x84 0x85 0x86 0x87 typedef enum { TagNone = 0, TagUltraLight = 1, Tag1K = 2, Tag4K = 3, TagDesFire = 4 } TagType; void uart_send_buffer(unsigned char* buf, unsigned char buf_size); void uart_read_buffer(unsigned char* buf); Test.C unsigned char Checksum (unsigned char* buf, int length) { unsigned char Result = 0; while (length > 0) Result += buf[--length]; return Result; } unsigned char Read_Tag_Info (TagType* tType, unsigned char* Tag_Id) { unsigned char buf[11]; buf[0] buf[1] buf[2] buf[3] buf[4] buf[5] = = = = = = STX >> 8; STX; 6; CMD_READ_TAG_INFO; ETX; Checksum(buf, 5); // // // // // // STX ilk byte. STX son byte. Toplam paket uzunluğu. Komut. Son bayt. Checksum baytını hesapla. uart_send_buffer (buf, 6); delay(); uart_read_buffer (buf); // Komut paketini gönder. // Bu süreyi kendiniz tayin ediniz. // Gelen yanıtı al. if (buf[3] == CMD_READ_TAG_INFO) { *tType = (TagType)buf[4]; memcpy (Tag_Id, &buf[5], 4); } // Gelen komut CMD_READ_TAG_INFO ise // Tag tipini al. // Tag id`yi al. return buf[3]; // Gelen komutu döndür. } int main (void) { while (1) { if (Read_Tag_Info() == CMD_READ_TAG_INFO) { // İşlemler... } else Hata_Islemleri(); // Kendi hata kontrolünüzü burada yapabilirsiniz. } } İstanbul Yazılım ve Elektronik Teknolojileri Tel : 0(212) 220 82 66 Fax: 0(212) 220 83 66 bilgi@istanbulyazilim.com www.istanbulyazilim.com