硬汉嵌入式论坛

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

[有问必答] NOR FLASH问题

[复制链接]

8

主题

33

回帖

7

积分

新手上路

积分
7
发表于 2015-7-13 19:28:27 | 显示全部楼层 |阅读模式
#define ADDR_SHIFT(A)     (NOR_FLASH_ADDR + (2 * (A)))
#define NOR_WRITE(Address, Data)  (*(__IO uint16_t *)(Address) = (Data))
为什么地址那里会乘以2?


    p.FSMC_AddressSetupTime = 0x06;            /* 0x05Õy3££¬ 0x04 3ö′í */
    p.FSMC_AddressHoldTime = 0x01;
    p.FSMC_DataSetupTime = 0x0C;            /* 0x0BÕy3££¬ 0x0A 3ö′í */
     这三个时间分别对应的是TAS,TAH,TDS么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107313
QQ
发表于 2015-7-13 20:00:35 | 显示全部楼层
1. nor flash仅支持16bit访问模式。
2. 时序这块没有研究过,有时间了你可以请教下站长,或者V5群的群主,是一个人。
回复

使用道具 举报

8

主题

33

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2015-7-17 11:55:55 | 显示全部楼层
static uint8_t NOR_GetStatus(uint32_t Timeout)
{
    uint16_t val1 = 0x00;
    uint16_t val2 = 0x00;
    uint8_t status = NOR_ONGOING;
    uint32_t timeout = Timeout;

    /* μè′yNORêä3öÃ|DÅoÅ£¬¸ßμçƽê±μè′y¡£±üÃaNORμÄÃ|DÅoÅ»1Î′·′ó31yà′μ¼ÖÂCPUìáÇ°èÏÎa2»Ã|áË */
    while ((!NOR_IS_BUSY()) && (timeout > 0))
    {
        timeout--;
    }

    /* μè′yNORÃ|DÅoŽáêø£¬μíμçƽê±μè′y */
    timeout = Timeout;
    while(NOR_IS_BUSY() && (timeout > 0))
    {
        timeout--;
    }

    /*
        - DQ 6 ±à3ìê±ìø±ä
        - DQ 6 oí DQ 2 Ôú2á3yê±ìø±ä
        - DQ 2 Ôú2á3y1òÆeê±ìø±ä
        - DQ 1 Ôú±à3ì′íÎóê±ÖÃ1
        - DQ 5 Ôú3¬ê±ê±ÖÃ1
    */
    /* í¨1y¶áè¡DQ6, DQ5 μÄêy¾YλêÇ·ñ′æÔú·-×aÏÖÏóÅD¶ÏNOR Äú2¿2ù×÷êÇ·ñíê3é¡£èç1ûÕyÃ|£¬Ôòμú2′ζáoíμú1′ζáμÄêy¾Y2»í¬ */
    while ((Timeout != 0x00) && (status != NOR_SUCCESS))
    {
        Timeout--;

        /* Read DQ6 */
        val1 = *(__IO uint16_t *)(NOR_FLASH_ADDR);
        val2 = *(__IO uint16_t *)(NOR_FLASH_ADDR);

        /* If DQ6 did not toggle between the two reads then return NOR_Success */
        if ((val1 & 0x0040) == (val2 & 0x0040))
        {
            return NOR_SUCCESS;
        }

        /* Read DQ2 */
        if((val1 & 0x0020) != 0x0020)
        {
            status = NOR_ONGOING;
        }

        val1 = *(__IO uint16_t *)(NOR_FLASH_ADDR);
        val2 = *(__IO uint16_t *)(NOR_FLASH_ADDR);

        if((val1 & 0x0040) == (val2 & 0x0040))
        {
            return NOR_SUCCESS;
        }
        else if ((val1 & 0x0020) == 0x0020)
        {
            status = NOR_ERROR;
            NOR_QuitToReadStatus();
        }
    }

    if (Timeout == 0x00)
    {
        status = NOR_TIMEOUT;
        NOR_QuitToReadStatus();
    }

    /* ·μ»Ø2ù×÷×′ì¬ */
    return (status);
}


这里是不是有个注释错了:
        /* Read DQ2 */
        if((val1 & 0x0020) != 0x0020)
        {
            status = NOR_ONGOING;
        }

以及:
    else if ((val1 & 0x0020) == 0x0020)
        {
            status = NOR_ERROR;
            NOR_QuitToReadStatus();
        }
这里是在check DQ5吧,不是DR2
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107313
QQ
发表于 2015-7-17 12:24:12 | 显示全部楼层

回 wwjdwy 的帖子

wwjdwy:static uint8_t NOR_GetStatus(uint32_t Timeout)
{
    uint16_t val1 = 0x00;
    uint16_t val2 = 0x00;
    uint8_t status = NOR_ONGOING;
....... (2015-07-17 11:55) 
以NOR FLASH的手册为准,有可能注释错误了。
回复

使用道具 举报

8

主题

33

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2015-7-20 10:39:42 | 显示全部楼层

回 eric2013 的帖子

eric2013:以NOR FLASH的手册为准,有可能注释错误了。 (2015-07-17 12:24) 
NOR FLASH在写入前是不是需要先擦除以前数据
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107313
QQ
发表于 2015-7-20 10:49:39 | 显示全部楼层

回 wwjdwy 的帖子

wwjdwy:NOR FLASH在写入前是不是需要先擦除以前数据 (2015-07-20 10:39) 
是的,FLASH都是这样的,必须把以前的擦除才可以写入新的数据。
回复

使用道具 举报

8

主题

33

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2015-7-20 10:56:31 | 显示全部楼层

回 eric2013 的帖子

eric2013:是的,FLASH都是这样的,必须把以前的擦除才可以写入新的数据。 (2015-07-20 10:49) 
多谢
回复

使用道具 举报

24

主题

36

回帖

24

积分

初级会员

积分
24
发表于 2015-7-20 16:06:49 | 显示全部楼层
请问楼主是用keil生成的bin文件吗 ?bin文件怎样生成的啊  谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107313
QQ
发表于 2015-7-20 16:42:17 | 显示全部楼层

回 guiguigui 的帖子

guiguigui:请问楼主是用keil生成的bin文件吗 ?bin文件怎样生成的啊  谢谢 (2015-07-20 16:06) 
http://www.armbbs.cn/forum.php?mod=viewthread&tid=7097
回复

使用道具 举报

24

主题

36

回帖

24

积分

初级会员

积分
24
发表于 2015-7-20 19:44:56 | 显示全部楼层

回 eric2013 的帖子

感谢回复  生成后我按照pdf上用jlink下载的教程进行操作  出现图片上的报错 请问什么原因 如何解决  谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107313
QQ
发表于 2015-7-20 21:59:24 | 显示全部楼层

回 guiguigui 的帖子

guiguigui: (2015-07-20 19:44) 
另一个帖子已经回复。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 08:52 , Processed in 0.187612 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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