平时的工作生活中经常要用密钥方式连接服务器 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 这时才恍然大悟 原来之前晶振压根就没焊好 这极大可能是数据丢失的原因 至于为什么能读取使用 难道是有内置晶振 只是内置晶振不稳定? 这个还需要实验来验证