Posted inSmardCard
Bingo,成功重写了USB控制传输
最近我们公司使用了一款智能卡芯片。该芯片为USB接口。 厂家提供了USB CCID源码,但是由于客户需要免驱只能使用HID或Mass storage Class。 经过几天的调试,Windows和Linux均可以识别为HID设备,但是使用set report时,通过bus bound可以看到urb发送出去,但是设备并没有进到set report函数。重新看了代码,发现原来是在USB insert和CCID通信过程中Control Endpoint不会发送带数据的Control Transaction。所以厂家的代码没有对其进行处理。 在试图在厂家代码上修改接受带数据的Control Transaction失败之后(厂家的代码可读性不是一般的差,虽然是51程序,也不至于全局变量满天飞吧,还有好多无意义代码和永不会执行到的代码)。 于是决定重写USB底层代码。周5约了厂家的一个技术支持详谈了2个多小时,解决了阅读USB specification、厂商datasheet和厂商代码的一些疑惑。 今天成功重写了USB底层代码,插入USB后可以成功识别为HID设备。