SCK=1'b0; mosi=senddata[0]; 主机发送数据的最低位 bitcounter=bitcounter+5'b1; 6'b01111: SCK=1'b1;
StatusReg0[0]=miso; 主机接收数据的最低位
bitcounter=bitcounter+5'b1; senddata=ramsendtemp; 6'b10000: SCK=1'b0; bitcounter=5'b0;
发送接收中间数据态(18个状态,采用顺序编码):
5'b00000: SCK=1'b0;
ramdReceivetemp=StatusReg0; 主机存储接收到的第一个数据,并准备
写入RAM
sendFinishByte=sendFinishByte+6'b1; 发送数据个数加一 receiveByte=receiveByte+6'b1; 接收数据个数加一
mosi=senddata[7]; 主机发送中间数据最高位 SendramCLK=1'b0; SendRDen=1'b1; bitcounter=bitcounter+5'b1;
5'b00001: SCK=1'b0; SendramCLK=1'b1;
bitcounter=bitcounter+5'b1;
5'b00010: SCK=1'b1; StatusReg0[7]=miso; 主机接收从机发出的数据的最高位 bitcounter=bitcounter+5'b1;
5'b00011: SCK=1'b0; mosi=senddata[6]; 主机发送中间数据次高位
ramsendtemp=ramindata; bitcounter=bitcounter+5'b1;
读取RAM,作为下一个发送数
5'b00100: SCK=1'b1;
StatusReg0[6]=miso; 主机接收从机发出数据的次高位 SendAddr=SendAddr+6'b1; 读RAM地址加一
SendramCLK=1'b0;
SendRDen=1'b0;
bitcounter=bitcounter+5'b1;
5'b00101: SCK=1'b0;
mosi=senddata[5]; ReceiveCLK=1'b0; ReceiveWen=1'b1; bitcounter=bitcounter+5'b1;
5'b00110: SCK=1'b1;
StatusReg0[5]=miso; bitcounter=bitcounter+5'b1;
5'b00111: SCK=1'b0;
mosi=senddata[4]; ReceiveData=ramdReceivetemp; bitcounter=bitcounter+5'b1;
5'b01000: SCK=1'b1;
StatusReg0[4]=miso; bitcounter=bitcounter+5'b1; ReceiveCLK=1'b1; (为
5'b01001: SCK=1'b0; mosi=senddata[3]; bitcounter=bitcounter+5'b1; ReceiveCLK=1'b0;
主机发送中间数据第五位
拉低写数据到RAM时钟 RAM写数据使能 主机接收从机发出的数据第五位 主机发送中间数据的第四位
准备好写入的数据(在时钟上升沿到来前, 将数据放到总线上) 主机接收从机发出数据的第四位 将拉收到的上一个数据第一次写入RAM 了安全,每个数据写两次) 5'b01010: SCK=1'b1; StatusReg0[3]=miso; bitcounter=bitcounter+5'b1;
ReceiveCLK=1'b1; 第二次写入(为了安全,每个数据写两次)
5'b01011: SCK=1'b0; mosi=senddata[2]; bitcounter=bitcounter+5'b1; ReceiveAddr=ReceiveAddr+6'b1; ReceiveCLK=1'b0; ReceiveWen=1'b0; //取消写ram信号
5'b01100:
SCK=1'b1;
StatusReg0[2]=miso; bitcounter=bitcounter+5'b1;
5'b01101: SCK=1'b0; mosi=senddata[1]; bitcounter=bitcounter+5'b1;
5'b01110: SCK=1'b1; StatusReg0[1]=miso; bitcounter=bitcounter+5'b1;
5'b01111: SCK=1'b0; mosi=senddata[0]; bitcounter=bitcounter+5'b1;
6'b10000: SCK=1'b1; StatusReg0[0]=miso; bitcounter=bitcounter+5'b1;
6'b10001: SCK=1'b0;
bitcounter=5'b0; sendFinishByte=sendFinishByte+6'b1; 接收数据个数加一 ramdReceivetemp=StatusReg0; 主机缓存接收到的数据
senddata=ramsendtemp; 主机把读到的下一个数据拉到发生寄 存器,准备发送 receiveByte=receiveByte+6'b1;
发送最后一个数据(21个状态,采用顺序编码):
前面17个状态与接收发送第一个数据,中间数据基本相同。故不作具体陈述。
6'b10010: CSN=1'b1; bitcounter=bitcounter+5'b1;
ReceiveCLK=1'b0;
6'b10011:
ReceiveCLK=1'b1; bitcounter=bitcounter+5'b1;
6'b10100:
ready=1'b0; feedback=1'b1; senden=1'b0; sendfilish=1; receiveByte=receiveByte+6'b1; ReceiveAddr=6'b0; ReceiveCLK=1'b0; ReceiveWen=1'b0; ReceiveReady=1'b1;
bitcounter=bitcounter+5'b1;
6'b10101: bitcounter=5'b0;
feedback=1'b0;
顶成框图:
取消选择从机使能 接收到数据第二次写入RAM(为了安 全,每个数据写两次) 发送接收完准备取消
反馈给RAM控制器,可以重新写数据 取消发送使能 发送完成标志 接收数据加一 接收地址清0 取消写ram信号
反馈信号清0