修改代码,QSPI的协议从四线改到了,1to4,测试代码也做了修改
This commit is contained in:
@@ -527,6 +527,9 @@ end
|
||||
reg [11:0] transCnt;
|
||||
reg [11:0] byteCnt;
|
||||
reg [2:0] bitCnt;
|
||||
`ifndef OLD_SPI_SUPPORT
|
||||
reg spi_1to4 = 1;
|
||||
`endif
|
||||
|
||||
|
||||
always @(posedge clock) begin
|
||||
@@ -553,7 +556,17 @@ always @(negedge sck) begin
|
||||
if( &bitCnt ) begin
|
||||
exChangeRego <= txBuf[nextByteCnt];
|
||||
end else begin
|
||||
`ifdef OLD_SPI_SUPPORT
|
||||
exChangeRego <= isQspi ? exChangeRego << 4 : exChangeRego << 1;
|
||||
`else
|
||||
//当单线转4线的协议生效时,且传输命令+地址,使用单线
|
||||
//否则使用接口的固定模式
|
||||
if (spi_1to4 & transCnt < 4) begin
|
||||
exChangeRego <= exChangeRego << 1;
|
||||
end else begin
|
||||
exChangeRego <= isQspi ? exChangeRego << 4 : exChangeRego << 1;
|
||||
end
|
||||
`endif
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -572,10 +585,22 @@ always @(posedge sck) begin
|
||||
if( isBusy ) begin
|
||||
if( transCnt <= length ) begin
|
||||
if( isQspi ) begin
|
||||
`ifdef OLD_SPI_SUPPORT
|
||||
bitCnt <= ~bitCnt;
|
||||
`else
|
||||
//当单线转4线的协议生效时,且传输命令+地址,使用单线;数据使用4线
|
||||
if ((transCnt < 4) & (spi_1to4)) begin
|
||||
bitCnt <= bitCnt + 1;
|
||||
end else begin
|
||||
bitCnt <= ~bitCnt;
|
||||
end
|
||||
`endif
|
||||
end else begin
|
||||
bitCnt <= bitCnt + 1;
|
||||
end
|
||||
|
||||
|
||||
`ifdef OLD_SPI_SUPPORT
|
||||
if ( idx >= (`ALL_DEV_NUM * 3) ) begin
|
||||
if( &bitCnt ) begin
|
||||
byteCnt <= byteCnt +1;
|
||||
@@ -609,6 +634,32 @@ always @(posedge sck) begin
|
||||
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
|
||||
end
|
||||
end
|
||||
`else
|
||||
if( &bitCnt ) begin
|
||||
byteCnt <= byteCnt +1;
|
||||
transCnt <= transCnt + 1;
|
||||
//读,且超过6个字节
|
||||
if( (txBuf[2] & 8'h80) === 8'h80 & nextByteCnt >= 5) begin
|
||||
rxBuf[byteCnt] <= exChangeRegi;
|
||||
//$display("spi read out %x", exChangeRegi);
|
||||
end
|
||||
//读,且超过了4个字节
|
||||
if( (txBuf[2] & 8'h80) === 8'h80 & nextByteCnt >= 4) begin
|
||||
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
|
||||
end else begin
|
||||
//写 或 读没有超过4个字节
|
||||
exChangeRegi <= 0;
|
||||
end
|
||||
end else begin
|
||||
//字节数小于4个字节,且启动了QSPI的1线命令4线数据
|
||||
if ((transCnt < 4) & (spi_1to4)) begin
|
||||
exChangeRegi <= isQspi ? {exChangeRegi[6:0], qspi_mux_miso[0]} : {exChangeRegi[6:0], spi_mux_miso};
|
||||
end else begin
|
||||
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
|
||||
end
|
||||
end
|
||||
`endif
|
||||
|
||||
end else begin
|
||||
isBusy <= #5 1'b0;
|
||||
end
|
||||
@@ -624,6 +675,7 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
|
||||
begin
|
||||
txBuf[0] <= saddress[15:8];
|
||||
txBuf[1] <= saddress[7:0];
|
||||
`ifdef OLD_SPI_SUPPORT
|
||||
if (sidx >=(`ALL_DEV_NUM * 3)) begin
|
||||
txBuf[2] <= (scmd | slength[12:8]);
|
||||
txBuf[3] <= slength[7:0];
|
||||
@@ -632,6 +684,11 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
|
||||
txBuf[2] <= scmd;
|
||||
length <= slength + 3;
|
||||
end
|
||||
`else
|
||||
txBuf[2] <= (scmd | slength[12:8]);
|
||||
txBuf[3] <= slength[7:0];
|
||||
length <= slength + 4 + 1;
|
||||
`endif
|
||||
|
||||
idx <= sidx;
|
||||
|
||||
@@ -644,6 +701,7 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
|
||||
@( negedge isBusy) #1000
|
||||
begin
|
||||
//$fwrite(spidata_file, "------------%5t------------\n", $realtime);
|
||||
`ifdef OLD_SPI_SUPPORT
|
||||
if (sidx >=(`ALL_DEV_NUM * 3)) begin
|
||||
$fwrite(spidata_file, "T:%t \tdev:%4d(%4d), addr:0x%02h%02h, %s, len:%4d (0x%02h%02h)\n",
|
||||
$realtime,
|
||||
@@ -662,9 +720,22 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
|
||||
(((txBuf[2] & 8'h80) == 0)? "Write":" Read"),
|
||||
slength);
|
||||
end
|
||||
|
||||
|
||||
if (sidx >=(`ALL_DEV_NUM * 3)) begin _pos = 4; end
|
||||
else begin _pos = 3; end
|
||||
`else
|
||||
$fwrite(spidata_file, "T:%t \tdev:%4d(%4d), addr:0x%02h%02h, %s, len:%4d (0x%02h%02h)\n",
|
||||
$realtime,
|
||||
sidx % (`ALL_DEV_NUM), sidx,
|
||||
txBuf[0],
|
||||
txBuf[1],
|
||||
(((txBuf[2] & 8'h80) == 0)? "Write":" Read"),
|
||||
slength,
|
||||
txBuf[2], txBuf[3]);
|
||||
_pos = 4;
|
||||
`endif
|
||||
|
||||
|
||||
|
||||
if ( ((saddress == 16'h0800)
|
||||
|| (saddress == 16'h1000)
|
||||
@@ -850,17 +921,17 @@ end
|
||||
|
||||
`ifdef USING_IQSPI
|
||||
`define INTERFACE_IDX 0//internal spi
|
||||
`define ARRAY_IDX_OFF 3
|
||||
`define ARRAY_IDX_OFF 4//3
|
||||
`endif
|
||||
|
||||
`ifdef USING_OSPI
|
||||
`define INTERFACE_IDX (`ALL_DEV_NUM)//internal spi
|
||||
`define ARRAY_IDX_OFF 3
|
||||
`define ARRAY_IDX_OFF 4//3
|
||||
`endif
|
||||
|
||||
`ifdef USING_OQSPI
|
||||
`define INTERFACE_IDX (`ALL_DEV_NUM * 2)//internal spi
|
||||
`define ARRAY_IDX_OFF 3
|
||||
`define ARRAY_IDX_OFF 4//3
|
||||
`endif
|
||||
|
||||
`ifdef USING_AQSPI
|
||||
@@ -941,6 +1012,7 @@ task wait_comm_finished(input [16:0] dev_idx);
|
||||
while (is_run == 1) begin
|
||||
txBuf[0] = 8'h00;
|
||||
txBuf[1] = 8'h74;
|
||||
`ifdef OLD_SPI_SUPPORT
|
||||
if (dev_idx >=(`ALL_DEV_NUM * 3)) begin
|
||||
txBuf[2] <= (`SPI_READ | 8'h0);
|
||||
txBuf[3] <= 8'h04;
|
||||
@@ -951,7 +1023,11 @@ task wait_comm_finished(input [16:0] dev_idx);
|
||||
length = 8'h07;
|
||||
//$display("using iqspi");
|
||||
end
|
||||
|
||||
`else
|
||||
txBuf[2] <= (`SPI_READ | 8'h0);
|
||||
txBuf[3] <= 8'h04;
|
||||
length = 8'h08;
|
||||
`endif
|
||||
|
||||
idx = dev_idx;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user