用FPGA采集图片,想用CH376保存图片到U盘。CH376每次CMD_BYTE_WRITE只能传输64KB(0xFFFF)的数据,但是一个图片需要20*64KB以上。CH376DS1.PDF提到,8.4.5新建文件并写入数据,多次CMD_BYTE_WRITE命令+CMD_WR_REQ_DATA命令+CMD_BYTE_WR_GO命令写入数据。
因此在verilog例子CH376_test.v中,想办法循环CMD_BYTE_WRITE代码段。
方法如下:
1、定义循环次数reg_t
2、在进程“//reg_op3=1: clk上升沿,更新读回的中断状态reg_err”中,BYTE_WRITE里面增加以下代码
BYTE_WRITE:case(reg_i)
8'h05:begin
reg_err<=!(reg_rx==8'h1e);//中断状态,USB_INT_DISK_WRITE0x1E/* USB存储器请求数据写入 */
// if(reg_t<(FRM_PIXS/BYTE_LEN)) //0~29
// reg_t<=reg_t+8'h01;//发0xffff个字节的次数累加
end
endcase
3、在进程“//reg_op4=1: clk下降沿,更新状态reg_wr_state”中,BYTE_WR_GO里面增加以下代码
BYTE_WR_GO:case(reg_i)
8'h03:begin
if(reg_go)reg_wr_state<=WR_REQ_DATA;
else if(!reg_err)begin
//if(reg_t<(FRM_PIXS/BYTE_LEN))//一帧视频数据没发送完
// reg_wr_state<=BYTE_WRITE; //回去重新启动下一个64KB数据
//else
reg_wr_state<=CLOSE_FILE;
end
else reg_wr_state<=BYTE_WRITE;//什么条件切换
end
endcase
运行后用SignalTap II抓到波形数据看,reg_t停留在等于0x04的状态,且一直处于reg_wr_state.WR_REQ_DATA状态。在电脑查看U盘,WCH.TXT文件长度为1KB,打开文件只看见一个字符,比如“t”。