在我要完成的任务中,CY68013工作在slave fifo模式,由master(外部FPGA)输入8位数据信号和时钟信号,由于是源源不断地送数据到主机中,master与USB并不需要过多的交互,也就是可以省略FLAG的若干信号,并直接将SLWR引脚置于使能状态。
对于56引脚SSOP封装的开发板,没有FIFOADR的引出针,而默认为高电平,故使用对应的EP8端点进行传入,由于是向host(PC机)传数据,工作在IN状态,并设置为AUTOIN工作状态。
主机需发送接收指令(读指令)来读入buffer上的数据,由驱动程序中的库函数调用来完成,由于需要工作在高速模式,最好采用异步传输模式,一次发送若干个beginxferdata(),然后再进行接收,最终把读入的数据写入文件。
目前遇到的问题是host的读指令无法完成,也就是没有数据被读入到计算机中,问题可能有很多种,需要逐一检查。
首先,去掉AUTOIN工作模式,在钩子函数中(TD_POLL)进行bulkloop的过程,即由计算机传出数据到一个OUT端点,再把数据写到IN端点,进行循环批量传输。下载固件后,发现PC机的调用可以正常工作,这也就说明了host的接口函数调用应当没有问题。
对FPGA的信号源进行检测,发现输出的数据信号与时钟信号都是正确的,作为数据源应当是没有问题的。
那么如此说来,问题会出现在USB芯片的硬件或固件部分。
对于硬件,在我的任务需求中,需要与FPGA连接的应该只需8位数据线(FD[7:0]),为减少干扰,由排线连接,时钟线也已单独与FPGA时钟输出信号连接,通过万用表测量,发现上电后,默认SLWR引脚为高电平,故再用一根跳线将其下拉至地,最后把FPGA与USB共地,host与USB通过USB总线相连。对于硬件连接方面,应该也没有什么问题。
那么问题应该只是在固件设置中了,对于基本的任务要求,所做的初始化设置包括了CPU工作时钟,从默认地12MHZ改为48MHz,似乎没什么必要,还有IFCFG,设置为选用外部时钟,工作在slave fifo模式,EP8CFG中开启AUTOIN,设置8bit传输,然后再设个autoin的长度,再包括诸如reset fifo和arm 一些out端口的操作,也看不出有什么问题来。
看来还是要仔细地思考思考,如果哪位游人碰巧有良策相告,感激不尽。
文章评论(0条评论)
登录后参与讨论