อ่านข้อมูลสมาร์ตการ์ด SLE4436 (TOT Card)

ผมได้เคยเขียนโปรแกรมอ่านสมาร์ตการ์ดเบอร์ SLE4436 ไปแล้วด้วยภาษาแอสเซมบลี คราวนี้จะมาเขียนในรูปแบบของภาษาซี ซึ่งดูแล้วเข้าใจง่ายกว่าภาษาเอสเซมบลี สำหรับใครที่อยากนำบัตรโทรศัพท์ที่ไม่สามารถใช้โทรออกได้แล้วมาใช้ประโยชน์ อยากให้ศึกษาการอ่านข้อมูลของสมาร์ตการ์ดเบอร์นี้ก่อน เพื่อเป็นแนวทางในการพัฒนาไปสู่ขั้นตอนอื่นๆ

ก่อนที่ผมจะเขียนโปรแกรมขออธิบายการทำงานแบบคร่าวๆ ให้ฟังก่อน สมาร์ตการ์ดเบอร์ SLE4436 เป็นสมาร์ตการที่นิยมใช้เป็น Debit Card หรือบัตรแทนเงินสด เพราะมีความปลอดภัยสูง สมาร์ตการ์ด SLE4436 เป็นสมาร์ตการ์ดแบบ EEPROM มีความจุ 48 ไบต์ ใน 8 ไบต์แรกจะเป็นข้อมูลที่เกี่ยวกับการผลิตเช่นรหัสประจำตัวบัตร ส่วนอีก 40 ไบต์ผู้ใช้สามารถกำหนดได้เอง สำหรับกรณีบัตรโทรศัพท์ (TOT Card) มีการจัดการกับระบบหน่วยความจำ โดยแบ่งออกเป็น ข้อมูล 5 ชุด

  • ข้อมูลชุดที่ 1 มีขนาด 3 ไบต์เป็นข้อมูลของรหัสสินค้าหรือ Factory Code
  • ข้อมูลชุดที่ 2 มีขนาด 5 ไบต์เป็นรหัสประจำตัวบัตร (เป็นเลขรหัสที่อยู่หลังบัตร)
  • ข้อมูลชุดที่ 3 มีขนาด 5 ไบต์เป็นจำนวนเงินที่ยังคงเหลือในบัตรโทรศัพท์
  • ข้อมูลชุดที่ 4 มีขนาด 32 ไบต์เป็นข้อมูลลับของผู้ผลิต
  • ข้อมูลชุดที่ 5 มีขนาด 1 ไบต์เป็นวันหมดอายุของบัตรโดยจะระบุเป็น เดือน ปี

ขั้นตอนการอ่านบัตรมีดังนี้

  • จ่ายไฟให้กับบัตร SLE4436
  • ให้ขา Reset เป็นลอจิกสูง และให้ขา Clock เป็นลอจิกสูง จากนั้นให้ขา Clock และขา Reset เป็นลอจิกต่ำ (ดูรูปภาพประกอบ)
  • จากนั้นส่งสัญญาณออกมาที่ขา Clock ข้อมูลจะออกมาจากขา I/O เป็นอย่างนี้เรื่อยไปตั้งแต่บิตที่ 0 ถึงบิตที่ 383 จากนั้นให้หยุดจ่ายไฟให้กับการ์ดกระบวนการอ่านเป็นอันเสร็จ

รูปสัญญาณที่ขาต่างๆ ในขณะที่อ่านข้อมูล

โปรแกรมอ่านข้อมูลสมาร์ตการ์ด SLE4436

/////////////////////////////////
//Program:Read SLE4436(TOT Card)/
//Programmer:Pratchaya Tongthong /
//E-mail:[email protected] /
/////////////////////////////////

#include <reg52.h> /* special function register declarations */
#include <stdio.h> /* prototype declarations for I/O functions */


//Define Bit
sbit SDA = P1^0;
sbit RST = P1^1;
sbit SCL = P1^2;


// Function
void init (void)
{
SCON = 0x52;
TMOD = 0x20;
TH1 = 0xfd;
TR1 = 1;
}

void delay (void) /*Delay smartcard*/
{
unsigned char i;
i = 20;
while (i>0) i--;
}


//RESET
void card_reset (void) /*Reset Smart Card*/
{
RST = 1;
delay();
SCL = 1;
delay();
SCL = 0;
delay();
RST = 0;
delay();

}
//Read 1 Byte
unsigned char rd_byte (void)
{
unsigned char i,dat;
bit inport;
dat = 0;
for (i=1;i<=8;i++)
{
SDA = 1;
dat >>= 1;
delay();
if (SDA) dat |= 0x80; else dat &= 0x7f;
SCL = 1;
delay ();
SCL = 0;
delay ();
}
return(dat);
}

/****************MAIN*******************/
void main (void)
{ unsigned char j;
init();

printf("\nRead TOT Card SLE4436\n");
card_reset();
for (j=1;j<=6;j++) /*Read 6x8 = 48 Byte*/
{unsigned char k;
for (k=1;k<=8;k++)
{
printf("%b02X ",rd_byte()); /*Show Data*/
}
printf("\n");
}
while(1);
}

 

 

หน้าถัดไป - - - >

 

 


Copyright © 2003 Aon micro. All rights reserved

E-mail:[email protected]

 

 

 

Hosted by www.Geocities.ws

1