查看“︁Demo:Flash”︁的源代码
←
Demo:Flash
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
不允许您执行您所请求的操作。
您可以查看和复制此页面的源代码。
=== Demo介绍: === 这部分Demo放在SDK下的 bouffalo_sdk/examples/peripherals/flash/ 路径下。 主要测试 flash 闪存的基本IO,加密功能,XIP功能。 === flash_iomode: === 该部分代码验证 flash 硬件的擦除功能;读出功能;写入功能,以此验证了软硬件功能的正确性和完整性。 '''该demo以不同的SPI通信模式来测试了基本的io'''。 ==== 模式说明: ==== {| class="wikitable" !模式 !全称 !数据线数量 !特点 !应用场景 |- |'''NIO''' |Normal I/O |1线 |标准SPI模式,单向传输 |基本应用 |- |'''DO''' |Dual Output |2线 |输出时使用双线 |中等速度需求 |- |'''QO''' |Quad Output |4线 |输出时使用四线 |高速读取 |- |'''DIO''' |Dual I/O |2线 |输入输出都使用双线 |高速双向 |- |'''QIO''' |Quad I/O |4线 |输入输出都使用四线 |最高性能 |} ==== 性能测试 ==== 测量操作:擦除+写入+读取的总时间;比较不同I/O模式的性能差异 start_time = bflb_mtimer_get_time_ms(); //.... printf("cost time:%lld ms\r\n", (bflb_mtimer_get_time_ms() - start_time)); '''地址选择''': 避开Bootloader区域;使用用户可编程区域 #define FLASH_RW_START_ADDR 0x10000 ==== 部分输出: ==== <syntaxhighlight lang="bash" line="1"> =========================== uart sig1:ffffffff, sig2:0000f32f clock gen1:9ffffffd, gen2:0fff0c11 xtal:40000000Hz(crystal) board init done =========================== select flash iomode:NIO cost time:47 ms flash data check success select flash iomode:DO cost time:44 ms flash data check success select flash iomode:QO cost time:44 ms flash data check success select flash iomode:DIO cost time:42 ms flash data check success select flash iomode:QIO cost time:50 ms flash data check success flash io case success </syntaxhighlight> === flash_sucre_write_read: === 这部分代码分为四部分: 首先进行了AES模块的加密功能性测试,然后对flash进行基本的功能性测试,最后使用flash_aes 解密测试和 AES模块解密测试。 ==== 测试内容总结: ==== {| class="wikitable" !测试阶段 !测试内容 !验证目的 |- |'''基础AES测试''' |CTR模式加解密 |硬件AES功能正常性 |- |'''Flash读写测试''' |加密数据存储/读取 |Flash驱动可靠性 |- |'''Flash AES测试''' |实时解密功能 |Flash AES模块正确性 |- |'''分段解密测试''' |多段解密与IV管理 |CTR模式连续操作能力 |} ==== 关键数据解释: ==== <syntaxhighlight lang="c" line="1"> // AES-CTR 128位密钥 uint8_t aes_ctr_128bit_key[16] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }; // AES-CTR 128位初始化向量 uint8_t aes_ctr_128bit_iv[16] = { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; ATTR_NOCACHE_NOINIT_RAM_SECTION uint8_t aes_ctr_pt_buffer[AES_DATA_LEN]; // 明文 ATTR_NOCACHE_NOINIT_RAM_SECTION uint8_t aes_ctr_ct_buffer[AES_DATA_LEN]; // 密文 ATTR_NOCACHE_NOINIT_RAM_SECTION uint8_t aes_ctr_tmp_buffer[AES_DATA_LEN]; // 缓冲区 ATTR_NOCACHE_NOINIT_RAM_SECTION uint8_t aes_ctr_tmp_buffer2[AES_DATA_LEN]; // 缓冲区2 </syntaxhighlight> ==== 部分输出: ==== <syntaxhighlight lang="bash" line="1"> =========================== uart sig1:ffffffff, sig2:0000f32f clock gen1:9ffffffd, gen2:0fff0c11 xtal:40000000Hz(crystal) board init done =========================== aes ctr128 encrypt & decrypt success flash write & read success flash decrypt with flash aes ctr128 success flash decrypt with sec eng aes ctr128 success flash test success </syntaxhighlight> === flash_read_write: === 该部分代码对 flash 进行基本的读写测试: 部分输出:<syntaxhighlight lang="bash" line="1"> =========================== uart sig1:ffffffff, sig2:0000f32f clock gen1:9ffffffd, gen2:0fff0c11 xtal:40000000Hz(crystal) board init done =========================== erase addr:00010000 check success erase addr:00011000 check success erase addr:00012000 check success erase addr:00013000 check success erase addr:00014000 check success erase addr:00015000 check success erase addr:00016000 check success erase addr:00017000 check success erase addr:00018000 check success erase addr:00019000 check success flash read write success </syntaxhighlight> === flash_xip_read: === 该部分代码主要测试XIP的软硬件支持,测试了大量的数据,从0x00到0xFF 大量数据来测试硬件的可靠性。 '''XIP读取''' 通过'''内存映射地址'''直接访问Flash,测试代码执行和数据访问的统一性 read_buf = (uint8_t *)(FLASH_XIP_BASE + flash_addr - bflb_flash_get_image_offset()) '''缓存一致性''' 每次读取前刷新数据缓存确保获取Flash最新数据,测试缓存管理。 bflb_l1c_dcache_invalidate_range(read_buf, sizeof(write_buf)); 部分输出:<syntaxhighlight lang="bash" line="1"> erase addr:0008b400 check success erase addr:0008b800 check success erase addr:0008bc00 check success erase addr:0008c000 check success erase addr:0008c400 check success erase addr:0008c800 check success erase addr:0008cc00 check success erase addr:0008d000 check success erase addr:0008d400 check success erase addr:0008d800 check success erase addr:0008dc00 check success erase addr:0008e000 check success erase addr:0008e400 check success erase addr:0008e800 check success erase addr:0008ec00 check success erase addr:0008f000 check success erase addr:0008f400 check success erase addr:0008f800 check success erase addr:0008fc00 check success flash xip read success </syntaxhighlight>代码将会有很多的输出,因为测量了较为大量的数据。
返回
Demo:Flash
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息