硬汉嵌入式论坛

 找回密码
 立即注册
查看: 111|回复: 1
收起左侧

[RL-FlashFS] 关于NAND的BUSY信号的问题。

[复制链接]

50

主题

68

回帖

218

积分

高级会员

积分
218
发表于 2024-5-9 09:20:39 | 显示全部楼层 |阅读模式
硬汉你好,我看到BUSY信号有如下两种处理:

1.延时方式。

#define WAIT_BUSY()        {        \
        volatile uint16_t k;         \
        for (k = 0; k < 200; k++)        \
        {        \
                if ((GPIOD->IDR & GPIO_PIN_6) == 0) break;        \
        }        \
        for (k = 0; k < 2000; k++)        \
        {        \
                if ((GPIOD->IDR & GPIO_PIN_6) != 0) break;        \
        }        \
}


int32_t Driver_NAND0_GetDeviceBusy (uint32_t dev_num)
{
        WAIT_BUSY();
       
        return 0;
}


2.直接读BUSY信号。

int32_t Driver_NAND0_GetDeviceBusy (uint32_t dev_num)
{
        int32_t ret;
        ret = !(GPIOD->IDR & GPIO_PIN_6) ? 1 : 0;
        return ret;
}


请问哪种更好呢?我感觉第一种只是加了延时,无法保证延时时间是合适的,但我看了你例程采用的是第一种方法。能否解释一下哪种更好?第一种确定没问题吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107156
QQ
发表于 2024-5-9 09:53:51 | 显示全部楼层
实际上第1种好,延迟判断相当于这么长时间的超时判断。超过时间了认为失败就行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 17:11 , Processed in 0.153056 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表