FT232RL是个是神奇的片子,说万能可能有些夸张,但是。。。总之就是FTDIChip这个神奇的公司基于类似的技术,做了很多好用的产品,包括转IIC啦,转SPI啦,密码狗啦之类的。是个很有用的工具就对了。
言归正传。用一句话描述起因呢就是,错用了D2XX里面的FT_ProgramEx这个函数之后,片子内部的Firmware各种混乱。
1、VID、PID与INF文件
首先,VID和PID都错乱了,原来的驱动没法用。百度之,啊哈,发现可以通过修改inf文件,来使原来的驱动可以支持新的VID和PID。
因为我的VID和PID都变成了cccc,所以在ftdiport.inf文件中添加:
%VID_cccc&PID_cccc.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_cccc&PID_cccc
在ftdibus.inf里面添加
%USB\VID_cccc&PID_cccc.DeviceDesc%=FtdiBus.NT,USB\VID_cccc&PID_cccc
OK,重新给无法识别的器件添加驱动,然后它又变得可以识别了。
这里可以分析下inf文件,很显然,驱动支持哪些VID和PID,可以通过修改inf文件来实现。首先,系统是会去读inf文件,看该驱动能不能支持刚插入的器件;然后,驱动会使用该VID和PID去识别期间,类似于Linux写驱动时的主设备号和子设备号。
2、下载libftd2xx1.1.12.tar.gz
额,虽然可识别了,但是用FT_ProgrammEx是没法再把Firmware给设置正确了,操作一次后,一插器件上来,windows就蓝屏。
所以,改在linux下面修改VID和PID再试。
先下了在Linux的D2XX支持包libftd2xx1.1.12.tar.gz过来。
唔,下这个包我抽了至少五根烟,虽然他只有34k大小,主要是服务器那边连接一直断。。。开始时候用chrome,断一次,手动点击连接一次。。。重复几次之后就没耐心了。所以,用上了wget。无限次尝试下载,断开连接1秒后尝试重新连接。
wget --tries=inf --read-timeout=10 http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx1.1.12.tar.gz
第一次设的是1s,结果不停在尝试连接,然后就设置为10s了,这样每10s尝试连接一次,开始时候总是速度很快,哦哈哈