qspi 芯片在quad模式下,擦除一个扇区正常,另外一个错误?
现在初始化可以读出芯片 ID,基本设置也都正常,但是在擦除时不对上面那个是初始化输出的信息,貌似跟设置的结果一样
输出的信息解释如下:
QSPI N25Q512A13xx ID == 0x20BA20 ... ... 芯片id
QSPI N25Q512A13xx Extended Address Enable OK = 0x3 扩展地址寄存器设置为 0x3,表示可以寻址 0x3ffffff的地址存储空间,也就是 64MByte的整个存储空间了
QSPI N25Q512A13xx Enter 4 Byte Addr Mode OK =0x81 使能了4字节地址模式
QSPI N25Q512A13xx Dummy Cycles Cfg = 171 虚拟时钟配置10
READ_VOL_CFG_REG_CMD 0x65 reg=0xF quad 设置 这个设置为 0x1f, 0x0f 结果都是一样的 读寄存器为 0x65, 写为 0x61
QSPI N25Q512A13xx Work Mode QUAD= 1 工作在 quad 模式 职位
QSPI EraseSector(0), Time = 237ms res = 0 第一扇区擦除的时间基本是对的
QSPI EraseSector(1), Time = 0ms res = 0 第二扇区擦除的时间不对了
QSPI Write End DataSize = 256, Time = 1msres = 0
QSPI Read End DataSize = 256, Time = 0ms res = 0
QSPI Data Read Write Relatively DataSize = 256Byte ... Error 错误了
0x65, 0x61 读写寄存器 bit 定义如下:
扩展地址寄存器:
不知道是我还有哪些没有设置对或者是没有设置啊 ??
擦除函数如下:
QSPI_StaticTypeDef QSPI_EraseSector(uint32_t Sector_address)
{
//Sector_address *= 4096;
Sector_address <<= 12;
if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK)
{
return QSPI_ERROR;
}
if(QSPI_SendCmdData(SUBSECTOR_ERASE_CMD, // _Instruction, 发送指令 这个指令为0x20
QSPI_INSTRUCTION_4_LINES, // _InstructionMode,指令模式
QSPI_ADDRESS_4_LINES, // _AddressMode, 地址模式
QSPI_ADDRESS_32_BITS, // _AddressSize, 地址长度
QSPI_DATA_NONE, // _DataMode, 数据模式
0, // _NbData, 数据读写字节数
0, // _DummyCycles, 设置空指令周期数
Sector_address, // _Address, 发送到的目的地址
NULL, //*_pBuf, 待发送的数据
QSPI_SEND_CMD // __SEND_CMD_DATA_T_SendCmdDat
) != QSPI_OK )
{
return QSPI_ERROR;
}
}
N25Q512芯片资料:
页:
[1]