新手入门
- 积分
- 4
- 金钱
- 4
- 注册时间
- 2025-11-19
- 在线时间
- 2 小时
|
2金钱
我引脚配置的GPMI模式,我想读取nand flash的ID,先发送复位命令0XFF , while (GPMI_CTRL0 & (1 << 29));发送任何命令都会卡在这里。
void nand_send_command(uint8_t cmd, uint32_t chip_select) //发送命令 OXFF 片选 0
{
uint32_t timeout = 1000000;
/* 等待控制器空闲 */
while (GPMI_CTRL0 & (1 << 29)) {
// 添加超时机制
if (--timeout == 0) {
PutStr("Controller busy timeout before command\n");
GPMI_CTRL0 &= ~(1 << 29); // 清除RUN位
gpmi_software_reset(); // 重新复位
return;
}
}
/* 配置控制寄存器0 */
GPMI_CTRL0 = (0x0 << 24) | // 写模式
(0x1 << 23) | // 8位模式
((chip_select & 0x7) << 20) | // 片选
(0x1 << 17) | // NAND_CLE
(0x0 << 16) | // 地址不递增
(0x1); // 传输1字节
/* 写入命令 */
GPMI_DATA = cmd;
print_hex(GPMI_DATA);
PutStr("GPMI_CTRL0-----send:");
print_hex(GPMI_CTRL0);
PutStr("\n");
/* 启动传输 */
GPMI_CTRL0 |= (1 << 29);
PutStr("GPMI_CTRL0-----send:");
print_hex(GPMI_CTRL0);
PutStr("\n"); // 延时完成
/* 等待完成 */
while (GPMI_CTRL0 & (1 << 29));
}
打印数据
GPMI_CTRL0-----send:00820001
GPMI_CTRL0-----send:20820001
|
|