主芯片:lm3S9B92
dataflash:试过W25Q32和W25Q80
SPI时钟:1Mbit
表现如下:
初始化SPI正常,读取ID的值为0xff,用示波器看SCK和mosi都有信号,CS也有,SCK的频率也确实是1Mbit,从而应该可以判断SPI的初始化没有问题。而miso持续为高。MISO上接了10K的上拉电阻。不过因为电阻电阻值比较大,应该不会有那么大的影响。
读取ID的代码如下:
请有经验的大虾帮忙判断一下问题大致在什么地方?
/************************************************************************
** 函数名称:W25X16_RdID
** 函数功能:W25X16的读ID函数,可选择读ID和读数据操作
** 入口参数:
** idtype IDType:ID类型。用户可在Jedec_ID,Dev_ID,Manu_ID三者里选择
** uint32* RcvbufPt:存储ID变量的指针
** 出口参数:操作成功则返回OK,失败则返回ERROR
** 注 意:若填入的参数不符合要求,则返回ERROR
************************************************************************/
uint8 W25X16_RdID(idtype IDType,uint32* RcvbufPt)
{
uint32 temp = 0;
if (IDType == Jedec_ID)
{
CE_Low();
delay(10000);
Send_Byte(0x9f); // 发送读JEDEC ID命令(9Fh)
temp = (temp | Get_Byte()) << 8; // 接收数据
temp = (temp | Get_Byte()) << 8;
temp = (temp | Get_Byte()); // 在本例中,temp的值应为0xEF4015
CE_High();
delay(10000);
*RcvbufPt = temp;
return (OK);
}
if ((IDType == Manu_ID) || (IDType == Dev_ID) )
{
CE_Low();
delay(10000);
Send_Byte(0x90); // 发送读ID命令90h
Send_Byte(0x00); // 发送地址
Send_Byte(0x00); // 发送地址
Send_Byte(IDType); // 发送地址 - 不是00H就是01H
temp = Get_Byte(); // 接收获取的数据字节
CE_High();
delay(10000);
*RcvbufPt = temp;
return (OK);
}
else
{
return (ERROR);
}
}
此帖出自
小平头技术问答
一周热门 更多>