平时的工作生活中经常要用密钥方式连接服务器 github仓库等 把私钥直接放随身的U盘中 即容易误删又不安全 单独一个U盘存密钥太浪费 于是便有了做一个小型存储装置的想法 因为手边便有一些闲置的EEPROM 刚好能够存下密钥对的大小 剩下的就是找一个驱动IC 然而对于这种应用需求的IC还是很稀少的 偶然的机会浏览沁恒的官网看到了CH331这个IC 甚是惊喜 最后的成果便是这个项目

bigphoto

虽然官方给出的典型应用很简单 不需要做什么修改就可以直接用
但还是遇到了一些坑 简单说一下

2KB的起源

我现在用的512位的ECDSA密钥 公私钥对打个包差不多1.4KB左右
刚好一颗24C16能放下

CH331A? CH331T?

买了颗CH331A做了第一版的PCB
但做好后怎么调试都用不了文件模式 以为是IC坏了 又从深水宝买了几颗 问题依旧
去沁恒官网社区看看 与这颗IC相关的内容屈指可数 没什么卵用 好在是在一个多年前的贴子下面找到了一个沁恒工程师的邮箱
遂抱着试试看的态度发个邮件试试 毕竟这么多年了这个邮箱不一定还在用了 说不定人都换了几波了
结果还收到了回复 随后便是一个星期的照着他说的来刷固件调试 依然没用
最后让我拍芯片的丝印 这才解释说市面上卖的CH331A型号没有文件模式功能 只有给某客户少批量定制的CH331T(又称CH331G)有文件模式功能 妈的不早说 白浪费了一星期

这个CH331T属实不好买 深水宝上都要好好找找 在一个角落里的小店买了两颗 又和工程师要了CH331T的封装引脚图(官网datasheet只有CH331A的 另一方面证明了属实小批量定制...) CH331A是SSOP-20封装 而CH331T是SOP-16封装 做了第二版PCB 测试一次成功 icon_exclaim.png

good

丢失数据?

测试文件系统成功 接下来就好放入密钥对了 结果写入的时候一切正常 等到拔下再次插入 拿出数据无法解压 查看二进制数据发现每隔16bit下一16bit全部为FF 这样间隔的丢失数据 16bit刚好是EEPROM的一页 等于说是每隔一页丢失一页数据 怀疑是EEPROM有问题 换了一个新的问题依旧 最后因为急着用 直接用烧写器烧进EEPROM再焊接上(这个烧写器用的CH341A 也是沁恒家的 2018new_kuxiao_thumb.png) 先凑合着用

write

后来在外出途中 板子上的12MHz晶振被蹭掉了 并且在缺失晶振的情况下 依然能用 依然能读取! 2018new_wenhao_thumb.png 这时才恍然大悟 原来之前晶振压根就没焊好 这极大可能是数据丢失的原因 至于为什么能读取使用 难道是有内置晶振 只是内置晶振不稳定? 这个还需要实验来验证