打印
[AT32F405]

【AT-START-F405测评】QPI-FLASH 操作测试

[复制链接]
651|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
        AT32F405支持QPI外设,挂载FLASH可以方便存储设备日志和历史数据。
        今天测试一下QPI操作FLASH的速度,板载16MB SPI-FLASH。
        测试代码如下:
 if (1 == nortst.check_req)
        {
                uint32_t amount = nortst.amount;
                uint32_t ticks;

                // 写入数据
                uint32_t dats = nortst.dat = nortst.dat_first;

                flash_dbg_print("nor flash check : start : R/W : %dMB\n", amount / (1024 * 1024));
                ticks = app_tick_get();
                for (nortst.addr = nortst.addr_start; nortst.addr < amount + nortst.addr_start; nortst.addr += SPI_NOR_PAGE_SIZE)
                {
                        if (nortst.addr % SPI_NOR_SECTOR_SIZE == 0)
                        {
                                bsp_snor_sector_erase(nortst.addr);
                        }

                        for (int index = 0; index < SPI_NOR_PAGE_SIZE / 4; index++)
                        {
                                nortst.buff[index].uVal = nortst.dat++;
                        }

                        // 写入一页数据
                        bsp_snor_write(nortst.addr, SPI_NOR_PAGE_SIZE, nortst.buff[0].v);

                        if (0 == (nortst.addr & 0x03FFFF))
                        {
                                flash_dbg_print("nor flash check write data: %d %% \n", (nortst.addr - nortst.addr_start) * 100 / amount);
                        }
                       
                        if (!nortst.check_req)
                                break;
                }
                flash_dbg_print("nor flash write end: time : %d ms \n", app_tick_get() - ticks);

                // 读回校验
                ticks = app_tick_get();
                nortst.dat = dats;
                for (nortst.addr = nortst.addr_start; nortst.addr < amount + nortst.addr_start; nortst.addr += SPI_NOR_PAGE_SIZE)
                {
                        if (nortst.addr % SPI_NOR_SECTOR_SIZE == 0)
                        {
                                // 读取一扇区数据
                                bsp_snor_read(nortst.addr, SPI_NOR_SECTOR_SIZE, nortst.buff[0].v);

                                for (int index = 0; index < SPI_NOR_SECTOR_SIZE / 4; index++)
                                {
                                        if (nortst.buff[index].uVal != nortst.dat)
                                        {
                                                nortst.err++;
                                        }
                                        nortst.dat++;
                                }

                                if (nortst.err)
                                {
                                        flash_dbg_print("nor flash check err: %d [url=home.php?mod=space&uid=72445]@[/url] %x \n", nortst.err, nortst.addr);
                                        nortst.err = 0;
                                }
                        }
                       
                        if (!nortst.check_req)
                                break;
                }

                nortst.check_req = 0;
                flash_dbg_print("nor flash read and check end : time : %d ms\n", app_tick_get() - ticks);

                set_u32(nortst.buff, 0, 4096 / 4);

                nortst.chk_cnt++;
                if (nortst.err)
                        nortst.chk_err_cnt++;
        }
其主要功能是根据指定地址和数量写入数据,然后读取并验证数据是否损坏。
       
        测试结果如下:
        QPI时钟频率配置为54MHz。
        控制台输入 nor check 4

        测试4MB数据读写,写入耗时35s,大约100+KB/s。
        读取并验证耗时:239ms,换算速度约16.7MB/s,这个速度相当可观。
        下面附上测试代码:
AT32F405_EVAL.rar (8.51 MB)

使用特权

评论回复
沙发
gouguoccc| | 2024-5-12 11:14 | 只看该作者
些数据这个时间不对吧?这么长?

使用特权

评论回复
板凳
aple0807|  楼主 | 2024-5-12 11:28 | 只看该作者
gouguoccc 发表于 2024-5-12 11:14
些数据这个时间不对吧?这么长?

时间很长吗?外部FLASH,读取并验证4MB数据,239ms

使用特权

评论回复
地板
gyh974| | 2024-5-13 09:48 | 只看该作者
QPI是什么意思?有原理图?怎么和MCU连接才是快速接口?

使用特权

评论回复
5
呐咯密密| | 2024-5-13 13:19 | 只看该作者
挺不错的测试,后面也要做QSPI,有个借鉴

使用特权

评论回复
6
aple0807|  楼主 | 2024-5-13 17:13 | 只看该作者
gyh974 发表于 2024-5-13 09:48
QPI是什么意思?有原理图?怎么和MCU连接才是快速接口?

QPI 和 SPI信号时序一样,区别是QPI有4条数据线,工作在半双工模式。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

314

帖子

2

粉丝