|
本帖最后由 hpdell 于 2022-8-23 14:56 编辑
w25q 读取 id 有时会失败 ,但是读写数据是正常的,这个改如何处理呀 ??
读写id 函数如下:
#define READ_ID_CMD2 0x9F /* 读取ID命令 */
uint32_t QSPI_ReadID(void)
{
uint32_t uiID;
OSPI_RegularCmdTypeDef sCommand = {0};
uint8_t buf[3];
/* 基本配置 */
sCommand.OperationType = HAL_OSPI_OPTYPE_COMMON_CFG;
sCommand.FlashId = HAL_OSPI_FLASH_ID_1;
sCommand.InstructionMode = QSPI_INSTRUCTION_1_LINE; /* 1线方式发送指令 */
sCommand.InstructionSize = HAL_OSPI_INSTRUCTION_8_BITS;
sCommand.AddressSize = QSPI_ADDRESS_32_BITS; /* 32位地址 */
sCommand.AlternateBytesMode = QSPI_ALTERNATE_BYTES_NONE; /* 无交替字节 */
sCommand.AddressDtrMode = HAL_OSPI_ADDRESS_DTR_DISABLE;
sCommand.DQSMode = HAL_OSPI_DQS_DISABLE;
sCommand.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; /* 每次传输都发指令 */
/* 读取JEDEC ID */
sCommand.Instruction = READ_ID_CMD2; /* 读取ID命令 */
sCommand.AddressMode = QSPI_ADDRESS_NONE; /* 1线地址 */
sCommand.DataMode = QSPI_DATA_1_LINE; /* 1线地址 */
sCommand.DummyCycles = 0; /* 无空周期 */
sCommand.NbData = 3; /* 读取三个数据 */
if (HAL_OSPI_Command(&OSPI_Handle, &sCommand, 10000) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
if (HAL_OSPI_Receive(&OSPI_Handle, buf, 10000) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
uiID = (buf[0] << 16) | (buf[1] << 8 ) | buf[2];
return uiID;
}
获取 id 有时正常,有时又不行,
|
|