我用5501的McBSP0接口连接flash at25f2048,进行读寄存器操作,时序如下图:
读状态寄存器的程序如下:
Uint16 SPI_ReadStatusReg(void)
{
Uint16 value=0;
hMcbsp=MCBSP_open(MCBSP_PORT0,MCBSP_OPEN_RESET);
SPI_8bit(hMcbsp); //将MCBSP0配置成时钟停止模式,数据长度为8bit
GPIO_RESET(IODATA,0X00);
while(!MCBSP_xrdy(hMcbsp)){};
MCBSP_write16(hMcbsp,RDSR);
while(!MCBSP_xrdy(hMcbsp)){};
MCBSP_write16(hMcbsp,0);
while(!MCBSP_rrdy(hMcbsp)){};
MCBSP_read16(hMcbsp);
SPIEND_Delay();
while(!MCBSP_rrdy(hMcbsp)){};
MCBSP_read16(hMcbsp);
GPIO_REST(IODATA,0x10);
SPIEND_Delay();
MCBSP_close(hMcbsp);
return value;
}
我想问的是为什么在发送了读寄存器命令RDSR之后,还要再一次执行MCBSP_write16(hMcbsp,0)语句,为什么MCBSP_read16(hMcbsp)语句也执行了两次。以上程序经过验证是正确的,如果发送RDSR命令后只执行一次MCBSP_read16(hMcbsp)读出来的数据将全部为0。但是我想请教一下老师,这是什么原因。
谢谢!
Shine:
第二次dummy write(空写)是为读操作提供clock。
但应该读一次就可以了,你试试读一次能否读到正确数据?
Meng Huang1:
回复 Shine:
读一次结果不正确呢?读出来的数都是0。
Shine:
回复 Meng Huang1:
确定是写-写-读么?那就要量一下时序看是哪根信号不对。
Meng Huang1:
回复 Shine:
量时序使用示波器么?
Shine:
回复 Meng Huang1:
对,用示波器量