spi flash 擦写寿命最少10万次,文件系统模式应该擦写次数会多些,具体多少,温度,电压等等相关。理论计算意义不大。
flash存放的卡内金额仅仅是给用户参考的:单片机具有读写权限,服务器仅仅就是写权限,读卡内金额无意义。
离线消费记录的保存:按消费次数保存。
问题点在于,卡内金额如何保存,保存到flash何处,以什么规则确定flash地址,取卡号后4位,no,重复了呢,麻烦,想了想,还是初始化时仅仅初始化卡号,初次刷卡时,设备端发现卡号地址是默认值,请求服务器分配地址,然后写卡地址,写flash。这是一种方式,还有一种就是初始化时,按照一定规则分配地址,想了想有点复杂。还是服务器统一分配比较好。
就是初次刷卡,前提是设备在线,服务器收到卡号的查询包,判断以下几个约束条件
1.该卡号是不是在代理商该设备名下(关键词:代理商手机号,设备号imei或者自定义id,可能代理商有几百台设备,一个客户不可能到所有设备取水,限制在居住附近的几台设备取水);
2.判断该卡是否已经分配flash存储区;已经分配直接下发更新flash卡内金额,未分配地址,获取已经分配的最大地址+1;
按照卡号+卡内金额 8个字节 一个扇区4k,能存512张卡,举个栗子,4Mbyte的flash 一共1024个扇区,前500扇区和后500扇区
互相备份,500*512=256000,25万6千张卡,剩下的24个扇区存离线数据:24*512=12288笔;
具体例子分析:
2台设备 alice和bob,alice和bob同时在线,没问题,
alice在线,bob离线,
相互刷单独刷,离线的可能有问题
alice离线,bob在线
相互刷单独刷,离线的可能有问题
alice离线,bob离线;
这种情况就是在若干台离线的设备上刷卡,由于数据不能同步,可能导致代理商损失,概率较小,一旦联网,钱会扣除。