在对sd卡初始化的时候,复位成功,但是收不到00.
我吧接收到的数据用串口输出,如下:
红线划的部分是复位之后保持不变的部分,后面的每次复位会有变化。
部分代码:
- case(sdinit_cstate)
- SDINIT_RST: begin
- if(delay_done) sdinit_nstate <= SDINIT_CLK; //上电后40us延时完成,进入74+CLK状态
- else sdinit_nstate <= SDINIT_RST; //等待上电后40us延时完成
- end
- SDINIT_CLK: begin
- if(cmd_rdy) sdinit_nstate <= SDINIT_CMD0; //74+CLK完成
- else sdinit_nstate <= SDINIT_CLK;
- end
- SDINIT_CMD0: begin
- if(cmd_rdy && (spi_rx_dbr == 8'h01)) sdinit_nstate <= SDINIT_CMD55;
- else sdinit_nstate <= SDINIT_CMD0;
- end
- SDINIT_CMD55: begin
- if(cmd_rdy && (spi_rx_dbr == 8'h01)) sdinit_nstate <= SDINIT_ACMD41;
- else sdinit_nstate <= SDINIT_CMD55;
- end
- SDINIT_ACMD41: begin
- if(retry_rep == 8'hff) sdinit_nstate <= SDINIT_CMD55; ///////////响应超时,返回IDLE重新发起命令
- else if(cmd_rdy && spi_rx_dbr == 8'h01) sdinit_nstate <= SDINIT_CMD55;
- else if(cmd_rdy && spi_rx_dbr == 8'h00) sdinit_nstate <= SDINIT_CMD16;
- else sdinit_nstate <= SDINIT_ACMD41;
- end
- /* SDINIT_CMD1: begin
- if(cmd_rdy) sdinit_nstate <= SDINIT_CMD16;
- else sdinit_nstate <= SDINIT_CMD1;
- end*/
- SDINIT_CMD16: begin
- if(cmd_rdy && (spi_rx_dbr == 8'h00)) sdinit_nstate <= SD_IDLE;
- else sdinit_nstate <= SDINIT_CMD16;
- end
- SD_IDLE: sdinit_nstate <= SD_RD_PT;
- SD_RD_PT: begin
- if(cmd_rdy) sdinit_nstate <= SD_RD_BPB;
- else sdinit_nstate <= SD_RD_PT;
- end
- SD_RD_BPB: begin
- if(cmd_rdy && arg == arg_r+P_MEM-32'h0000_0200) sdinit_nstate <= SD_DELAY;
- else sdinit_nstate <= SD_RD_BPB;
- end
- SD_DELAY: begin
- if(done_5s) sdinit_nstate <= SD_IDLE; //显示下一幅图片
- else sdinit_nstate <= SD_DELAY;
- end
- default: sdinit_nstate <= SDINIT_RST;
- endcase
|