DS5250与磁卡读卡器的连接 - 中国一卡通网
用户名密码 [免费注册] [找回密码] 推广技巧 发布求购 建商铺  发产品  会员体制比较  
 

DS5250与磁卡读卡器的连接

来源:中国一卡通网  作者:不详  发布时间:2012-06-12 09:53:54  字体:[ ]

关键字:智能卡  磁卡  智能卡芯片   

摘   要:背面带有编码磁条的卡通常称为磁卡,广泛用于银行、储值等金融领域。信用卡、ATM和借记卡都是典型的磁卡,有的卡片还嵌入了智能卡芯片。其它应用包括:游戏、影印和公交等领域的礼品卡、安全卡以及房间钥匙卡等。采用标准ISO格式时,这些磁卡的最大容量只有160字节,一般不能存储大量数据。与智能卡或便携式闪存相比,磁卡的存储容量足以支持金融和银行应用,被广泛应用于该领域。而且,磁卡价格低,比较可靠,不需要内部供电,读取相对方便。


  读取并解码卡数据
  完成读卡,并且所有卡数据经过解码并存储在读卡器ASIC后,读卡器将DATA线驱动为低电平。如上所述,这一操作提示DS5250可以同步输出卡数据。在这一点,DS5250在同步输出每一位数据时,将STROBE驱动为高电平,然后再驱动低电平,以顺序读出每一位卡数据。在STROBE驱动为高电平,然后再驱动为低电平后,读卡器ASIC将下一位数据在DATA线上同步输出。ASIC在第0位将DATA驱动为高电平,第1位时将DATA驱动为低电平。

  // Clock a single bit value out of the card reader by driving STROBE high,
  // then low, and reading the DATA line.

  int readBit()
  {
  int i;

  strobeHigh(); // Drive STROBE high.
  strobeLow(); // Drive STROBE low (DATA line now contains bit).

  i = P0;
  if ((i & 1) == 0) {
  return 1; // Low on DATA line indicates a 1 bit.
  } else {
  return 0; // High on DATA line indicates a 0 bit.
  }
  }
  读卡器同步输出的前16位是“前导”位,指出读卡器ASIC的版本。这些为并非卡的数据,应用程序可以忽略它们。


  磁道A译码
  16位前导码之后,DATA线上同步输出704位数据,其中包括从磁卡磁道A读取的数据。当采用标准ISO格式进行编码时,磁道A含有76个字符,使用的7位字符集含有字母、数字等符号。

  每7位字符在同步输出时最低有效位(LSB)在前,最高位(即,第7位)是奇偶校验位,可用于验证卡数据的完整性。除去奇偶校验位,其余6位定义了64个字符中的某一个,可以编码到磁道A上。例如,000000b代表空格符,000001b代表感叹号。以下代码为char7bit[64]字符阵列。

  // 0123456789012345678901234567890123456789012345678901234567890 123
  char char7bit[64] =
  " !'#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_";


  // Clock out and decode a 7-bit character from the track memory, returning the
  // character value. 7-bit (alphanumeric) characters are found on Track A only.

  char read7BitChar()
  {
  int i, c;

  // Each character is composed of 7 bits, which we clock out of the track memory
  // beginning with the least significant bit. Bit 7 is parity, which is ignored.

  c = 0;
  for (i = 1; i < 128; i *= 2) {
  c |= (readBit() * i);
  }
  c &= 0x3F;

  return char7bit[c]; // Decode/return the character using the 7-bit table.
  }

  ....

  // Track A - 76 characters, 7 bits per alphanumberic character including parity.

  printf("Track A > ");

  for (i = 0; i < 76; i++) {
  putchar(read7BitChar());
  }
  printf("\r\n\r\n");

  // At this point, we have read 532 bits of the 704-bit Track A memory on the
  // card reader IC. Flush the remaining 172 bits.

  for (i = 0; i < 172; i++) {
  readBit();
  }
  不同类型的卡在磁道A上有不同的数据。磁道A还可以含有字母字符。因此,磁道A常用于存储持卡人的姓名、地址和账号等数字信息。正如上面代码所示,在同步输出磁道B的数据之前,必须读出磁道A的所有704位数据(即使并非所有位都含有编码数据)。

  磁道B译码
  磁道B的编码和磁道A相似,只是采用了5位(4位数据和1位奇偶校验位)编码,而不是7位编码。磁道B的字符集只含有数字字符和符号,如下面的char5bit[16]字符阵列所示。
  // 0123456789012345
  char char5bit[16] = "0123456789:;<=>?";

  // Clock out and decode a 5-bit character from the track memory, returning the
  // character value. 5-bit (numeric+symbol) characters are found on Tracks B and C.

  char read5BitChar()
  {
  int i, c;

  // Each character is composed of 5 bits, which we clock out of the track memory
  // beginning with the least significant bit. Bit 5 is parity, which is ignored.

  c = 0;
  for (i = 1; i < 32; i *= 2) {
  c |= (readBit() * i);
  }
  c &= 0x0F;

  return char5bit[c]; // Decode/return the character using the 5-bit table.
  }

  ....
 
  // Track B - 40 characters, 5 bits per numeric/symbol character including parity.

  printf("Track B > ");

  for (i = 0; i < 40; i++) {
  putchar(read5BitChar());
  }
  printf("\r\n\r\n");
  在磁道A的最后,读取磁道C之前,必须读取磁道B的所有剩余位(如果需要用到磁道C)。由于已经从磁道B (40个字符 x 5位)读取了200位,在访问磁道C之前,必须同步输出其余504位。

  磁道C译码
  磁道C的编码方式和磁道B一样,并采用了同一字符集,最多可编码107个7位字符。磁道C最初的目的是作为可写数据区,以支持离线金融交易,但不常用。大部分磁卡在磁道C上不带有编码数据。

  结论 

  磁卡广泛应用于金融、接入控制、政府以及储值等领域。通过加入一个简单的MagTek卡扫描读卡器,为DS5250评估板提供少量的支持硬件,开发系统即可支持磁卡读取功能以及安全微控制器的高级安全加密功能。利用Keil的µVision C编译器,很容易在DS5250安全微控制器上演示磁卡读取和解码功能。

  注意:由于其内在的安全特性,DS5250安全微控制器受美国出口法的控制。如需获得包括数据资料、用户指南在内的所有DS5250文档,需要签署保密协议(NDA)。而本应用笔记及其源代码都可以免费提供,直接装载到Maxim的任一8051微控制器中。 .

更多

新闻投稿合作邮箱:yktchina-admin@163.com    字体[ ] [收藏] [进入论坛]

推荐文章

论坛热帖