环境配置
开始调试前必须确保电脑已安装上正确的驱动程序,64位系统在driver中安装amd64的,32位的系统安装x86的(我在调试时因为驱动程序没有选对,真是血的教训。。。)。对于FTD2XX的芯片,除非使用MPSSE功能,其他情况都使用FTD2XX的驱动,然后使用dll或者配置成com来进行通信。
建议在调试硬件前用FTDI官方提供的测试程序进行测试。这是C#下的测试程序,http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/CSharp.htm,建议使用example 3的数据轮回测试,注意这个测试程序需要把TXD和RXD引脚短接,RTS和CTS引脚短接。因此建议画板的时候可以留下接口方便测试。如果四个脚都连接FPGA,那也可以用FPGA来扮演连接器的角色。
然后,别忘了还要使用FT_Prog把芯片和Master通信方式配置成FT1248模式。,这个在hardware specific中PART A的hardware中可以选择。,并在driver中选择FTD2XX。需要注意的是,如果只使用了一个FT232H和Master通信,FT1248总线上没有其他设备,那么一般会选上FT1248 setting的Flow ctrl not selected,这样在非通信过程是芯片的MIOSIO[0]和MISO才会反应数据缓冲区状态,在调试过程中如果出现数据发送出去但是板子没有收到的情况,那么有一种情况就是电脑的另一个usb也连着一个ft的usb芯片,有可能是程序烧录器。那就拔掉以后再试试。
FT1248的8bit协议
(一) FT232H在本协议中作为从机与主机进行8bit通信(或者1bit,2bit,4bit,本文基于8bit)
1. 在8bits通信中,会用到11根信号线,双向数据线[7:0] MIOSIO,Master控制的时钟线(SCLK)和使能线(SS_N),FT232H控制的MISO
2. FT232H判断使用的是多少bit通信是通过检测SS_N在拉低后的第一个周期内MIOSIO情况(需要注意手册建议每个MIOSIO都要加上拉电阻,因此芯片默认都是在高电平的),
如果[7:4]MIOSIO中有一个被拉低了,那么通信为8bit;
如果[3:2]MIOSIO中有一个被拉低了,那么通信为4bit;
如果[1]MIOSIO被拉低了,那么通信为2bit,否则就是1bit通信;
3. 在未进行通信时,FT232H将会通过MIOSIO[0]和MISO分别反应write buffer和read buffer的状态,两个buffer都有1 kBytes的空间:
(a)其中MIOSIO[0]在高电平表示在write buffer中至少还能存放1 byte;
(b)MISO在高电平表示read buffer还有至少1 byte没有被读取;
4. 当SS_N变为低电平表示主机正开始一次传输,这时首先由主机发送8bit的CMD指令(在第一个时钟返回延,从机进行采样),没有使用到的MIOSIO都拉低。
对于8bit模式, 目前可用的指令包括:
CMD0 = MIOSIO[6]; 0x0 写输入到USB缓冲
CMD1 = MIOSIO[5]; 0x1 从USB缓冲读数据
CMD2 = MIOSIO[3]; 0x2 读取modem状态
CMD3 = MIOSIO[0]; 0x3 写modem状态
0x4 把write buffer中的数据擦除
5. 在第二个周期开始时,[7:0]MIOSIO的传输要转向,主机的这几根线进入三态状态(注意:AN_167手册上对8bit的这段描述貌似直接复制了4bit的,所以时钟和位宽都有错误)。转向完后,第三个周期就开始收/发数据了,当然这个时候SS_N都要保持低电平。同时,MISO会使用ACK或NAK来告知是否传输成功。
6. 在准备把SS_N拉高来结束传输前,必须把MIOSIO置于三态,使得FT232H能通过MIOSIO[0]把write buffer状态映射出来。
7. MISO的状态将表示是否在write的时候write buffer满了,或者在read的时候read buffer空了。如果出现这些异常,MISO将反馈NAK,手册建议当收到NAK的下一个周期必须SS_N置高停止传输,否则之后的read和write都会出问题。
8. 读写数据在每个返回延进行采样。