nemon

【PSoC4】自在船上曰,逝者如斯夫

0
阅读(2653)

古人云“仁者乐山,智者乐水”,从圣贤到布衣,以至于古代屌丝,有太多太多关于水的故事……

『楚人有涉江者,其剑自舟中坠于水,遽契其舟,曰:“是吾剑之所从坠。”舟止,从其所契者入水求之。舟已行矣,而剑不行,求剑若此,不亦惑乎?』这就是大家都很熟悉的刻舟求剑的故事出自《吕氏春秋·察今》,说的是楚国有人坐船渡河时,不慎把剑掉入江中,他在舟上刻下记号,说:“这是我把剑掉下的地方。”当舟停驶时,他才沿着记号跳入河中找剑,遍寻不获。
让我们来做一些假设——假如楚人所坠为一木剑,而舟也并非在航行,而是在漂流,那么由于舟、剑相对于河水几乎是静止,刻舟真的可以求剑了。
下面就来说说我们假设的这个情况在生活中的一个安全应用。
银行最开始办理网上业务后,就不断推出新的安全措施,最开始工行有一个卡片码表,当登录的时候按页面上的行列提示输入对应的代码;后来有了USB接口的插在电脑上的设备、安全控件等等。今天我们说的这个安全应用和卡片码表有些类似,先叫它令牌吧。这个令牌的功能是根据其存储的初始码和颁发的时间实时来计算出一个代码,那么只要这个令牌没有丢,就可以保护信息安全。在登录服务器的时候,由于服务器也存储了初始码和颁发的时间,因此可以计算出代码。当服务器上的代码和令牌产生的代码一致,可以在很大程度上认为请求者拥有特定的令牌,从而验证了请求者的身份。同时由于令牌在初始化之后就不再与其他设备物理连接,也就保证了初始码和颁发的时间这个敏感信息不会被泄露,从而保障了令牌本身的安全。
下面我们就用Psoc4Kit来做这么一个令牌。

显示屏使用常见的1602,一是因为常见,而是因为Creator里有组件,好处理。
因为令牌只有在初始化的时候用usb供电,因此颁发之后就要解决供电问题,方法是使用外接电池给1602供电,同时以也接上VIN。
为了省电,平时LCD的背光和显示都是关闭的,应此1602的16pin接到了CY8C42的P3.4以便控制。
使用CRC组件计算代码,这样有2个好处,一是充分利用硬件资源,二是可以在编译固件时按需配置。

实物照片,这是按下按键之后的样子,没按键时lcd是灭的,为节约篇幅就不传上来了,请自行脑补:

系统使用的过程分2步,办法和验证,详细如下:

(一)颁发:

首先使用此工具颁发,也就是写入初始码,并上传:

(二)验证

平时使用时按一下psoc4上的按键,就会显示出4位代码导航到http://prototypetesting.aliapp.com/passnumber/uc2pHTML.php,输入用户名和代码,如果出现“{err:0,msg:"pass"}”表示验证通过(注意到没?这个代码为支持ajax调用,用json做返回)。

项目做完,老规矩,看一下用了多少资源:

------------------------------------------------------------
Technology mapping summary
------------------------------------------------------------

Resource Type                 : Used : Free :  Max :  % Used
============================================================
Digital domain clock dividers :    0 :    8 :    8 :   0.00%
Analog domain clock dividers  :    0 :    4 :    4 :   0.00%
Pins                          :   13 :   23 :   36 :  36.11%
UDB Macrocells                :    2 :   30 :   32 :   6.25%
UDB Unique Pterms             :    3 :   61 :   64 :   4.69%
UDB Total Pterms              :    3 :      :      : 
UDB Datapath Cells            :    2 :    2 :    4 :  50.00%
UDB Status Cells              :    0 :    4 :    4 :   0.00%
UDB Control Cells             :    4 :    0 :    4 : 100.00%
            Control Registers :    4 
Interrupts                    :    1 :   31 :   32 :   3.13%
Comparator/Opamp Fixed Blocks :    0 :    2 :    2 :   0.00%
SAR Fixed Blocks              :    0 :    1 :    1 :   0.00%
CSD Fixed Blocks              :    0 :    1 :    1 :   0.00%
8-bit CapSense IDACs          :    0 :    1 :    1 :   0.00%
7-bit CapSense IDACs          :    0 :    1 :    1 :   0.00%
Temperature Sensor            :    0 :    1 :    1 :   0.00%
Low Power Comparator          :    0 :    2 :    2 :   0.00%
TCPWM Blocks                  :    1 :    3 :    4 :  25.00%
Serial Communication Blocks   :    1 :    1 :    2 :  50.00%
Segment LCD Blocks            :    0 :    1 :    1 :   0.00%

其实真没用多少,呵呵。


要是告诉你,这个令牌的应用原型只花了2天就做出来了,你信吗?反正我做了。

附上位机程序一枚(VS2010.Net4)Release_20131130171625.rar

这次时间比较紧,整个项目又用了Psoc、C#、php三个平台,难免有疏漏的地方还请大家指正。