收藏
回答

微信小程序MifareClassic验证扇区成功后为什么读取块数据会失败?

读块逻辑是这样的

MifareClassic.transceive(Object object)

分别发送数据

1 先验证扇区keyA密码:

指令0x60+块号(1byte)+tagID(4byte)+keyA(6byte)

2 验证通过后进行块数据读取:

指令 0x30 + 块号 可以用于读取某个块的数据


现在遇到的问题是,正常的逻辑是在验证扇区成功后,即transceive的success回调中,得到返回0,验证成功后再去读取块号

nfcAdapater.getMifareClassic().transceive({

data:cmdBuffer,

success: function(res){

//判断验证如果成功

//再次发送transceive读取块数据

}

})

但是这样做并不能读取到数据,反而会收到报错!!同理,采用new Promise同步方法也一样报错!!请问这是为什么?是不是内部的同步机制导致芯片清空了扇区验证的状态?这是bug吗?


经反复测试,直接走异步流程是可以验证通过并读取到块数据的:

//验证扇区KeyA(异步,不等待返回)

//读取块数据(异步,不等待返回)

但是这样写,是否会无法保证逻辑的顺序性:验证扇区成功-->读取块数据


回答关注问题邀请回答
收藏

1 个回答

  • 梦什么想
    梦什么想
    06-04

    楼主,找到解决方案了吗,我这边验证卡,读数据 都没问题,但是把验证卡,读数据放到Promise 进行封装,就报错了transceive:fail:system internal error: Transceive failed

    06-04
    有用
    回复
登录 后发表内容