將文件通過CH376保存到U盤,總耗時(shí)30.75秒。是否有辦法快一些?

我使用 FPGA 通過 CH376 將 文件 保存到 U 盤(使用 CMD_BYTE_WRITE 模式)。

文件大小是 720*720 = 518,400 byte。

完成操作的 總的 時(shí)間是 30.75秒, 其中 29.75秒 處于 WAIT_INTn_VALID 的狀態(tài)。


重復(fù)試驗(yàn)多次,都能順利保存文件。每一次花費(fèi)的時(shí)間也都是 30.75秒 附近。

代碼中, 對(duì)于 WAIT_INTn_VALID 狀態(tài), 都是 等待 INT 管腳 從 低電平 切換到 高電平, 就退出此狀態(tài)。

另外, 向 CH376 下發(fā)命令, 命令之間的間隔, 都是 1.5us (規(guī)格書中的 推薦值)


請(qǐng)問, 對(duì)于 CMD_BYTE_WRITE 模式, 確實(shí)需要 漫長(zhǎng)的 等待的 時(shí)間嗎?

如果 它 確實(shí)需要時(shí)間, 是否有其它好的辦法, 使得 CH376 能夠比較快地將 文件保存到 U 盤?

請(qǐng)有經(jīng)驗(yàn)的好同志, 相應(yīng)指點(diǎn)一下!?


呵呵, 如果涉及到其它參考文檔, 也可發(fā)送到我的郵箱 個(gè)人信息保護(hù),已隱藏?

先謝謝啦!

當(dāng)前你的速度也就不到20KB/S,還可以很大程度上提速。

你描述的“等待 INT 管腳 從 低電平 切換到 高電平, 就退出此狀態(tài)”,應(yīng)該是從高變低說明中斷到。

看一下不同接口、不同模式下的速度差異:(參考值)

圖片.png


非常感謝 ! !

你說的正確, 應(yīng)該是 INT 管腳 從 到 H 到 L 說明 中斷 到了。


對(duì)于 你給出的 表格中, "字節(jié)寫每次512" ?是否 表示 每次可以 直接向 CH376 寫入 512 個(gè)字節(jié)?


目前我的 代碼中, 每次都是先 讀取 允許寫的 字節(jié)數(shù)目(ch375_reqWrPat),然后再 向 CH375 寫入相應(yīng)的字節(jié)數(shù),然后再讀取得到 ch375_reqWrPat, 再相應(yīng)寫。這樣循環(huán)。

實(shí)際調(diào)測(cè)發(fā)現(xiàn), ch375_reqWrPat 遠(yuǎn)遠(yuǎn)小于 512 個(gè)字節(jié)。即,每次寫的數(shù)量挺少,但每次的命令,都需要等待 N*1.5us??赡苁且?yàn)檫@個(gè)原因,寫操作 時(shí)間 太久。


備注:上面提到的 讀取 ch375_reqWrPat,就是 向 CH375 寫入 WR_REQ_DATA 以后, 再接著執(zhí)行 讀 操作, 將獲得的 數(shù)據(jù)賦值給 ch375_reqWrPat。


請(qǐng)問,是否 向 CH375 寫入 WR_REQ_DATA 以后, 可以不必 先讀取ch375_reqWrPat 然后寫相應(yīng)的字節(jié)數(shù), 而是可以 直接向 CH375 寫入 512 個(gè)字節(jié)?



不可以的。提速可以通過換接口,提高接口通訊速度,扇區(qū)操作,縮短底層讀寫函數(shù)延時(shí)(太短可能對(duì)穩(wěn)定性有影響,保證最低時(shí)序要求)來實(shí)現(xiàn)。


CH376 ? PIC 單片機(jī) 80M, SPI(10M),全匯編程序,扇區(qū)寫,實(shí)現(xiàn)速度214K(BYTE PER SECOND)


BYTE_WRITE,CH376字節(jié)寫入,只能每次256Byte。


不一定,只能說緩沖區(qū)有這么大,單次傳輸未必是255。


BYTE_WRITE:case(reg_i)

8'h00:reg_tx<=8'h3c;//CMD_BYTE_WRITE?0x3C/*主機(jī)文件模式: 以字節(jié)為單位向當(dāng)前位置寫入數(shù)據(jù)塊*/

8'h01:reg_tx<=8'hff;//發(fā)送字節(jié)數(shù),低8位

8'h02:reg_tx<=8'hff;//發(fā)送字節(jié)數(shù),高8位

8'h04:reg_tx<=8'h22;//CMD01_GET_STATUS?0x22/* 獲取中斷狀態(tài)并取消中斷請(qǐng)求 */

endcase

*************************************************

從這里看,一次發(fā)64KByte,0xffff。

*************************************************

WR_REQ_DATA:case({reg_i_8,reg_i})//2~256為數(shù)據(jù),255個(gè)數(shù)據(jù)?數(shù)據(jù)塊長(zhǎng)度不是256個(gè)字節(jié)嗎?

9'h000:reg_i<=reg_i+8'h01;

9'h001:begin?

????if(reg_go) begin

????????reg_i<=8'h00;?

reg_i_8<=1'b0;

????end

????else?

reg_i<=reg_i+8'h01;

????end

9'h0ff:begin?//0x0ff255//solfey

????reg_i<=8'h00;

????reg_i_8<=1'b1;//0x100256//solfey

end

default:begin

????if(!reg_err) begin?

reg_i<=8'h00;

reg_i_8<=1'b0;

????end

????else?

reg_i<=reg_i+8'h01;

end

endcase

*****************************************************************************************

從這里看,要發(fā)64KByte數(shù)據(jù),需要循環(huán)WR_REQ_DATA共65536/256=256次。

*****************************************************************************************


問題來了,如果保存10MByte的文件呢?10*1024KByte/64KByte=160,那就是循環(huán)BYTE_WRITE共160次,循環(huán)WR_REQ_DATA共160*256=40960次。



手冊(cè)上可沒有提到單次寫256字節(jié),這里的單次256你是如何得到的?只是說緩沖區(qū)256,單次傳輸?shù)拈L(zhǎng)度是376報(bào)給你的一個(gè)數(shù)值,報(bào)多少傳多少。調(diào)一次BYTE_WRITE最多寫0xFFFF字節(jié),如果寫10M,那你就多調(diào)用幾次BYTE_WRITE不就行了。至于BYTE_WRITE函數(shù)中,單次寫多少,寫多少次是無從得知的。


手冊(cè)5.13章節(jié)WR_REQ_DATA說明,數(shù)據(jù)塊長(zhǎng)度的有效值對(duì)于文件讀寫是0至255。應(yīng)該理解成每次啟動(dòng)WR_REQ_DATA最多能傳輸256Byte數(shù)據(jù)。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频