İ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
[email protected]
www.istanbulyazilim.com

Benzer belgeler