tag 标签: 磁卡

相关博文
  • 热度 19
    2014-10-28 21:41
    1493 次阅读|
    0 个评论
       忙了将近两个月,手头的项目也接近尾声了,设计了一个最小模块,可以将刷卡的信息和按键的信息发送到手机上,主要分为主控模块和SIM模块,尺寸分别为33.8*18.7*3.8mm 和32.1*25.2*4.69mm,基本已经做到了我能做的最小了。    首先硬件设计大概花了有半个多月,一开始想到的难题:1:因为电流需要达到3A,所以考虑用哪种芯片,外围设备又比较少?2:因为SIM模块需要4V电压,我怎么得到这个电压?3:因为尺寸要求非常小,如何选用合理器件?改了又改,最终方案:1:选用便宜的MP1584EN吧,TI的TPS54340还是比较贵,国产硕芯产的其实也不错,只是还得去公司买批量。2:开始想着是12V转为4V,通过一个1N4007降为3.3为STM32供电,但是终究不稳定,二极管压降和电流有关系,还是决定通过SP6205-3.3(最大电流500mA,对于STM32和解码芯片足够用了)降为3.3。3:选用48引脚STM32F103C8T6,外围电路就几个电容,晶振用内部的,存数据用的FLASH用内部的,预留SWD焊点在板子背面。SIM模块8mm的板子的上面采用容易焊接并且体积小的M35,下面采用厚度只有1.24mm的华为SIM卡座。    运气不好,买电阻时候走了眼,160K的电阻愣是买成了160R,导致稳压芯片出来就没值,顿时傻了眼,本来这个芯片就是第一次搞,不过细心的我还是一步一步检查出来了,板子成功,就是磁卡解码芯片21006541采用的QFN14封装实在难焊,曾考虑到完全兼容的PA1100,但是出于其有点山寨并且不稳定放弃了,电烙铁和热风*都用上了就是焊不牢固,都有虚焊,检查的话可以通过复位后配置为输入的DATA引脚是否是高电平来检查(当然靠datasheet了),还曾经熬了个夜,又焊了一块板子,可还是不行,最后的最后,搞了点焊锡膏在焊盘上,用热风*吹好了,当时就在想要是有钢网就好了,直接贴上去回流焊一过,当然热风*就足够了。    程序一开始以为很简单,后来发现不是那么回事。最开始拿个一个买的M35模块,搞了几天才搞出短信,最坑爹的是竟然是我的USB-UART模块坏了,换成了另一个用PL2003做的,便宜好用,在网上下了个SIM模块调试助手,他每次发送都会自带\r\n,这在其他小助手里面是没有的,其他的甚至都不能发回车换行。键盘曾经考虑用外部中断,但是13个IO口确实有点多,并且我中断号重复了,比如PA0和PB0我都用了,这在STM32中不能同时配置为外部中断,麻烦了,只能轮询读取IO电平了,这个方法简单实用。再有就是解码芯片,原理就研究了几天,好不容易写个简单粗暴的程序,一看还真行,当时高兴了半天,结果被要求正反刷都要行,这次还真不能投机取巧了,找规律吧,写了2天,实测手边上的农行,建行,工行,超市卡都管用,不错。但是问题又出现了,我不能每次刷完卡都要等到短信过来再刷啊,我必须可以支持连续刷啊,怎么办?我搞了几个缓存,先把数据存起来,并且我刷卡和键盘轮询我没有安排在主函数里面,这样的话我等待短信发送的过程按键就无效了,我搞了个1ms定时器,在这里面轮询,虽然有点不走寻常路,但是实测还是可以的。然后还有存储的数据,比如要发送的号码,掉点以后也要记住啊,没办法,地方有限,只能用内部FLASH了,但是这个Flash擦除必须一页一页的擦除,并且写入数据前要先擦除,只能搞个标志位,等置位的时候把所有要保存的数据都重新保存一遍,然后每次上电都要读取一遍。这样,基本功能都差不多实现了,测试后,那么问题来了,挖掘机技术到底……额,不是,这怎么老死机,死机就是老进入等待短信的死循环,因为没发送成功一次,SIM模块会返还给主控一个指令,我程序中设定只有读取到这个指令才跳出循环。为什么不返还指令??初步预测是我发送的太猛了,咱歇一会,哪怕100ms,可能能成功,这个问题还有待验证。     现在东西在收尾测试中,仅仅以此来纪念我这将近两个月的青春!
相关资源