Demo:Basical case:修订间差异
无编辑摘要 |
无编辑摘要 |
||
| 第52行: | 第52行: | ||
阶段二以共简单共享资源简单测试Task争夺临界资源的方式测试'''互斥量''',途中高优先级的任务将启动并占用CPU一段时间以此测试抢占'''任务调度'''。 | 阶段二以共简单共享资源简单测试Task争夺临界资源的方式测试'''互斥量''',途中高优先级的任务将启动并占用CPU一段时间以此测试抢占'''任务调度'''。 | ||
'''源码部分输出:''' | |||
[FREERTOS_TEST CONSOLE] ===== PHASE 1: Queue/Semaphore Test ===== | [FREERTOS_TEST CONSOLE] ===== PHASE 1: Queue/Semaphore Test ===== | ||
[FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task]: Starting consumer tasks... | [FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task]: Starting consumer tasks... | ||
| 第301行: | 第301行: | ||
保存在 SDK 下的 bouffalo_sdk/examples/mbedtls | 保存在 SDK 下的 bouffalo_sdk/examples/mbedtls | ||
'''ECDH测试''' | |||
函数:<code>mbedtls_ecdh_test</code> | 函数:<code>mbedtls_ecdh_test</code> | ||
'''测试内容''':客户端和服务器分别生成公私钥对。客户端和服务器分别计算共享密钥。验证客户端和服务器计算的共享密钥是否一致 | '''测试内容''':客户端和服务器分别生成公私钥对。客户端和服务器分别计算共享密钥。验证客户端和服务器计算的共享密钥是否一致 | ||
'''ECDSA测试''' | |||
函数:<code>mbedtls_ecdsa_test</code> | 函数:<code>mbedtls_ecdsa_test</code> | ||
| 第313行: | 第315行: | ||
'''涉及的算法''':ECDSA数字签名;哈希算法:SHA-256。 | '''涉及的算法''':ECDSA数字签名;哈希算法:SHA-256。 | ||
'''AES测试''' | |||
函数:<code>mbedtls_aes_test</code> | 函数:<code>mbedtls_aes_test</code> | ||
'''测试内容''':测试 AES 的 ECB、CBC 和 CTR三种模式。验证解密后的数据是否与原始数据一致。 | '''测试内容''':测试 AES 的 ECB、CBC 和 CTR三种模式。验证解密后的数据是否与原始数据一致。 | ||
'''SHA测试''' | |||
函数:<code>mbedtls_sha_test</code> | 函数:<code>mbedtls_sha_test</code> | ||
| 第443行: | 第447行: | ||
#* 如果修剪值有效,则进一步验证其奇偶校验。如果校验通过,打印修剪值;否则提示校验错误。 | #* 如果修剪值有效,则进一步验证其奇偶校验。如果校验通过,打印修剪值;否则提示校验错误。 | ||
#* 如果修剪值无效,提示未找到。 | #* 如果修剪值无效,提示未找到。 | ||
'''示例输出:'''<syntaxhighlight lang="bash"> | |||
<syntaxhighlight lang="bash"> | |||
=========================== | =========================== | ||
uart sig1:ffffffff, sig2:0000f32f | uart sig1:ffffffff, sig2:0000f32f | ||
| 第472行: | 第474行: | ||
# '''ES8311 音频编解码器初始化''':配置 ES8311 的工作模式。调用 <code>es8311_init()</code> 初始化 ES8311,并设置音量。启动 ES8311 的 ADC 和 DAC 模块。 | # '''ES8311 音频编解码器初始化''':配置 ES8311 的工作模式。调用 <code>es8311_init()</code> 初始化 ES8311,并设置音量。启动 ES8311 的 ADC 和 DAC 模块。 | ||
# '''I2S 和 DMA 初始化''':调用 <code>i2s_dma_init()</code> 初始化 I2S 接口和 DMA 通道。配置 DMA 通道,启动 DMA 通道,开始音频数据的传输和接收。 | # '''I2S 和 DMA 初始化''':调用 <code>i2s_dma_init()</code> 初始化 I2S 接口和 DMA 通道。配置 DMA 通道,启动 DMA 通道,开始音频数据的传输和接收。 | ||
'''示例输出:'''<syntaxhighlight lang="bash" line="1"> | |||
<syntaxhighlight lang="bash" line="1"> | |||
=========================== | =========================== | ||
es8311 init | es8311 init | ||
| 第530行: | 第530行: | ||
* <code>test_string_length</code>: 测试字符串长度限制打印 | * <code>test_string_length</code>: 测试字符串长度限制打印 | ||
'''示例输出:'''<syntaxhighlight lang="bash" line="1"> | |||
<syntaxhighlight lang="bash" line="1"> | |||
test 26 begin >>>>>>>>>>> | test 26 begin >>>>>>>>>>> | ||
53000atest-20 bit | 53000atest-20 bit | ||
2025年8月11日 (一) 09:30的版本
前言
该页面将介绍一些较为简单基础的测试case 功能,目前包括 freertos;log等级输出;boot2;这一小节将会为您先详细介绍如何 编译 烧录 如何下载烧录工具等基本信息。
源码编译:
在对应 Case 的文件夹下有一个 README.md 文件,该文件中根据不同的开发板型号有不同编译的参数,例如 bl616 :
- BL616/BL618 ``` make CHIP=bl616 BOARD=bl616dk ``` #以上为README文件中的内容,根据内容直接执行对应make编译指令即可
make如果成功,你会在终端看到:
Generate .../bouffalo_sdk/examples/freertos/build/build_out/freertos_bl616.bin(示例) 代表生成了对应可供烧录的固件。
开发板烧录:
执行make命令后,在该文件夹下会生成一个build目录,在文件夹中有一个生成的固件 freertos_bl616.bin ,该文件用于烧录直接使用(类似于keil生成的.hex文件)。
其具体路径为 .../bouffalo_sdk/examples/freertos/build/build_out/freertos_bl616.bin
下载烧录工具:
下载BLDevCube工具:下载后解压即可直接使用。
https://dev.bouffalolab.com/
烧录具体步骤:
Step1:打开DevCube选择对应开发板型号。

Step2:选择对应的 .bin 文件,选择对应的串口。
注意:要选择IOT并勾选enable
Step3:
按住boot键按一下复位键(按复位时boot键不松开),然后点击Create & Download。查看下方的输出信息是否烧录成功。
Demo:FreeRTOS
在Bouffalo SDK上使用FreeRTOS APP
源码介绍:
该文件的源码在 bouffalo_sdk/examples/freertos/main.c中,该测试 demo 简单测试了一些组件,包括Semaphore,Mutex,Queue,Priority 的基本简单测试。
测试分为两个阶段:
阶段一以消费者生产者模型测试信号量和信号队列组件,共生成三个Task。阶段结束后Task自动销毁。
阶段二以共简单共享资源简单测试Task争夺临界资源的方式测试互斥量,途中高优先级的任务将启动并占用CPU一段时间以此测试抢占任务调度。
源码部分输出:
[FREERTOS_TEST CONSOLE] ===== PHASE 1: Queue/Semaphore Test ===== [FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task]: Starting consumer tasks... [FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task]: Starting producer task... [FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 1]: task started [FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 2]: task started [FREERTOS_TEST CONSOLE] [I][MAIN] [Producer 1]: message send success [FREERTOS_TEST CONSOLE] [I][MAIN] [Producer 1]: message send success [FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 1]: received msg (task:1, ts:1) [FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 2]: received msg (task:1, ts:501) [FREERTOS_TEST CONSOLE] [I][MAIN] [Producer 1]: message send success [FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 1]: received msg (task:1, ts:1001) [FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 2]: queue empty ..... [FREERTOS_TEST CONSOLE] ===== PHASE 2: Priority/Mutex Test ===== [FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 1]: Exiting due to phase change [FREERTOS_TEST CONSOLE] [I][MAIN] [Consumer 2]: Exiting due to phase change [FREERTOS_TEST CONSOLE] [I][MAIN] [Producer 1]: Exiting due to phase change [FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task] Starting High Priority task... [FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task] Starting Shared Resource tasks... [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Attempt to acquire mutex [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Aquired. [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: value = 1 [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Holding mutex for 500ms [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Attempt to acquire mutex ..... [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Holding mutex for 500ms [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Attempt to acquire mutex [FREERTOS_TEST CONSOLE] [I][MAIN] [High Priority Task]: High priority task running [FREERTOS_TEST CONSOLE] [I][MAIN] [High Priority Task]: Completed [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Release mutex [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Aquired. [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: value = 5 ..... [FREERTOS_TEST CONSOLE] ===== END PHASE 2 ===== [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Release mutex [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Aquired. [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: value = 11 [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Holding mutex for 500ms [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 4]: Exiting due to phase change [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Release mutex [FREERTOS_TEST CONSOLE] [I][MAIN] [Mutex Task 3]: Exiting due to phase change [FREERTOS_TEST CONSOLE] [I][MAIN] [Process Task] All Test Complete.
Demo:bflog
Demo介绍:
该部分代码储存在 bouffalo_sdk/examples/bflog/barebone_sync 路径下,主要测试该开发板不同级别的log输出功能;
filter对输出日志的过滤功能。bflog分为五个级别,分别为:
| 日志等级 | 说明 | 基本应用场景 |
|---|---|---|
| FATL | 致命错误(Fatal) | 系统无法继续运行的灾难性事件(如核心崩溃、数据损坏),需立即人工干预并终止程序。 |
| ERRO | 错误(Error) | 影响当前操作的关键错误(如功能失效、外部服务异常),但系统仍可部分运行,需尽快处理。 |
| WARN | 警告(Warning) | 非关键性异常或潜在风险(如配置降级、资源不足),需关注但无需立即行动。 |
| INFO | 信息(Info) | 常规运行状态记录(如服务启动、关键操作完成),用于监控系统健康状态。 |
| DBUG | 调试(Debug) | 开发/测试阶段的详细运行细节(如变量值、逻辑分支),用于定位问题原因。 |
| TRAC | 跟踪(Trace) | 最细粒度的执行路径追踪(如函数调用栈、循环过程),用于深度分析复杂逻辑。 |
barebone_sync:
该部分主要是裸机测试了以上的各个等级log输出,filter过滤。
部分输出:
===========================
uart sig1:ffffffff, sig2:0000f32f
clock gen1:9ffffffd, gen2:0fff0c11
xtal:40000000Hz(crystal)
board init done
===========================
============================== enable all output
[FATL][ 25338][2022-12-16 17:51:40][main.c:main:130]<MAIN> hello world this is fatal error
[ERRO][ 25858][2022-12-16 17:51:40][main.c:main:131]<MAIN> hello world this is error
[WARN][ 26355][2022-12-16 17:51:40][main.c:main:132]<MAIN> hello world this is warning
[INFO][ 26864][2022-12-16 17:51:40][main.c:main:133]<MAIN> hello world this is information
[DBUG][ 27374][2022-12-16 17:51:40][main.c:main:134]<MAIN> hello world this is degug information
[TRAC][ 27934][2022-12-16 17:51:40][main.c:main:135]<MAIN> hello world this is trace information
[FATL][ 28492][2022-12-16 17:51:40][log_test.c:test_log:13]<TEST> hello test this is fatal error
[ERRO][ 29049][2022-12-16 17:51:40][log_test.c:test_log:14]<TEST> hello test this is error
[WARN][ 29580][2022-12-16 17:51:40][log_test.c:test_log:15]<TEST> hello test this is warning
[INFO][ 30119][2022-12-16 17:51:40][log_test.c:test_log:16]<TEST> hello test this is information
[DBUG][ 30660][2022-12-16 17:51:40][log_test.c:test_log:17]<TEST> hello test this is degug information
[TRAC][ 31248][2022-12-16 17:51:40][log_test.c:test_log:18]<TEST> hello test this is trace information
============================== enable only MAIN output
[FATL][ 1031983][2022-12-16 17:51:41][log_test.c:test_log:13]<TEST> hello test this is fatal error
[ERRO][ 1032537][2022-12-16 17:51:41][log_test.c:test_log:14]<TEST> hello test this is error
[WARN][ 1033066][2022-12-16 17:51:41][log_test.c:test_log:15]<TEST> hello test this is warning
[INFO][ 1033606][2022-12-16 17:51:41][log_test.c:test_log:16]<TEST> hello test this is information
[DBUG][ 1034146][2022-12-16 17:51:41][log_test.c:test_log:17]<TEST> hello test this is degug information
[TRAC][ 1034736][2022-12-16 17:51:41][log_test.c:test_log:18]<TEST> hello test this is trace information
============================== disable all output
freertos_async:
该部分测试了在FreeRTOS下log的输出是否正常。
该case创建了两个任务,消费者和生产者,从信号队列中进行获取和放入的经典场景来测试log。
消费者任务和生产者任务具体代码放在同目录下的: thread_consumer; thread_producer;中。
部分输出:
Demo:helloworld
Demo介绍:
该demo测试基本日志等级输出,该Demo是对bflog加了一层封装,比如控制日志输出等级,控制是否使用严重等级颜色输出。
保存路径: bouffalo_sdk/examples/helloworld
在当前默认情况下的输出如下:
=========================== uart sig1:ffffffff, sig2:0000f32f clock gen1:9ffffffd, gen2:0fff0c11 xtal:40000000Hz(crystal) board init done =========================== [F][MAIN] hello world fatal [E][MAIN] hello world error [W][MAIN] hello world warning [I][MAIN] hello world information hello world fatal raw hello world error raw hello world warning raw hello world information raw
通过代码对应可以看到部分代码没有输出,部分代码有颜色而部分代码没有颜色。 没有输出的部分是因为 LOG_LEVEL 的定义级别导致没有输出:
#if (CONFIG_LOG_LEVEL >= 4) #define LOG_D(...) BFLOG_D((void *)&__bflog_recorder, __VA_ARGS__) #define LOG_RD(...) BFLOG_RD((void *)&__bflog_recorder, __VA_ARGS__) #else #define LOG_D(...) ((void)0) #define LOG_RD(...) ((void)0) #endif #if (CONFIG_LOG_LEVEL >= 5) #define LOG_T(...) BFLOG_T((void *)&__bflog_recorder, __VA_ARGS__) #define LOG_RT(...) BFLOG_RT((void *)&__bflog_recorder, __VA_ARGS__) #else #define LOG_T(...) ((void)0) #define LOG_RT(...) ((void)0) #endif
是否有颜色则取决于是否带有R,在引用文件中可以看到:
#define BFLOG_RF(_log, ...) BFLOG_X(_log, BFLOG_LEVEL_RAW | BFLOG_LEVEL_FATAL, (BFLOG_TAG), ##__VA_ARGS__)
以上配置可以在同级目录下的 proj.conf 中。
Demo:log_dbg_assert
这部分代码和Demo:helloworld 基本一致,但是多了测试断言输出的功能。
保存在 SDK 下的: bouffalo_sdk/examples/log_dbg_assert
在代码中先进行了一个阶乘的递归函数,每一次递归以及判读啊都会输出断言信息以此测试断言输出。
示例输出:
[I][MAIN] message = "hellokszhdfoiasjdkjnskjxnvuiolashdfoinaskjldfnvklasjhdfi213489o71234589073298dfl;asjdlfnkjzxncvhasdlkfljhasjkldjhnvjkaslndfvkljashdlifhui"
[I][MAIN] message (size: 138):
00000000: 68 65 6c 6c 6f 6b 73 7a 68 64 66 6f 69 61 73 6a 'hellokszhdfoiasj'
00000010: 64 6b 6a 6e 73 6b 6a 78 6e 76 75 69 6f 6c 61 73 'dkjnskjxnvuiolas'
00000020: 68 64 66 6f 69 6e 61 73 6b 6a 6c 64 66 6e 76 6b 'hdfoinaskjldfnvk'
00000030: 6c 61 73 6a 68 64 66 69 32 31 33 34 38 39 6f 37 'lasjhdfi213489o7'
00000040: 31 32 33 34 35 38 39 30 37 33 32 39 38 64 66 6c '1234589073298dfl'
00000050: 3b 61 73 6a 64 6c 66 6e 6b 6a 7a 78 6e 63 76 68 ';asjdlfnkjzxncvh'
00000060: 61 73 64 6c 6b 66 6c 6a 68 61 73 6a 6b 6c 64 6a 'asdlkfljhasjkldj'
00000070: 68 6e 76 6a 6b 61 73 6c 6e 64 66 76 6b 6c 6a 61 'hnvjkaslndfvklja'
00000080: 73 68 64 6c 69 66 68 75 69 00 'shdlifhui.'
[I][MAIN] 3 * a = 6 (0x6)
[I][MAIN] numbers = [7,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,] (length: 512)
[I][MAIN] n <= 1 = false
[I][MAIN] n <= 1 = false
[I][MAIN] n <= 1 = false
[I][MAIN] n <= 1 = true
[I][MAIN] 1 = 1 (0x1)
[I][MAIN] n * factorial(n - 1) = 2 (0x2)
[I][MAIN] n * factorial(n - 1) = 6 (0x6)
[I][MAIN] n * factorial(n - 1) = 24 (0x18)
[I][MAIN] factorial(4) = 24 (0x18)
[I][MAIN] n <= 1 = false
[I][MAIN] n <= 1 = false
[I][MAIN] n <= 1 = false
[I][MAIN] n <= 1 = true
[I][MAIN] 1 = 1 (0x1)
.......
1 == factorial(4) but 1 = 1 , factorial(4) = 24
error handler
[F][MAIN] hello world fatal
[E][MAIN] hello world error
[W][MAIN] hello world warning
[I][MAIN] hello world information
hello world fatal raw
hello world error raw
hello world warning raw
hello world information raw
[F][MAIN] hello world fatal
[E][MAIN] hello world error
[W][MAIN] hello world warning
[I][MAIN] hello world information
Demo:boot2 isp
这部分代码是一个bootloader程序,具备 安全启动、双分区更新、压缩支持、多核管理 等工业级特性。
该demo存放在 SDK 下的:/home/user/FromGit/bouffalo_sdk/examples/boot2_isp 路径下。
主要功能
- 分区表:读取并验证分区表(
pt_table_stuff),确定活动分区(active_id)支持 A/B 双分区设计,实现无缝固件更新和回滚处理分区条目,包括固件位置、大小、版本号 - 固件加载与启动:该程序会根据分区表加载固件到内存支持压缩固件:XZ 格式的解压
blsp_boot2_check_xz_fw多核支持:BLSP_BOOT2_CPU_GROUP_MAX定义 CPU 数量 - 固件更新:OTA 更新:将新固件从临时分区复制到主分区防回滚(Anti-Rollback):防止降级到不安全版本支持 USB/UART 烧录模式,对应代码:
bflb_eflash_loader_main - 安全:SHA-256 校验 具有固件完整性检查
您可以在开发板存在其他 App 的同时烧录该 bin ,这并不会覆盖掉你的程序,而是只为开发板更换 bootloader.
Demo:mbedtls
Demo介绍:
这段代码对tls中的加密功能进行了全面的自检测,保证mbedtls库可以正常在平台上运行。
保存在 SDK 下的 bouffalo_sdk/examples/mbedtls
ECDH测试
函数:mbedtls_ecdh_test
测试内容:客户端和服务器分别生成公私钥对。客户端和服务器分别计算共享密钥。验证客户端和服务器计算的共享密钥是否一致
ECDSA测试
函数:mbedtls_ecdsa_test
测试内容:生成 ECDSA 密钥对。使用私钥对哈希值进行签名,生成签名。使用公钥验证签名的正确性。
涉及的算法:ECDSA数字签名;哈希算法:SHA-256。
AES测试
函数:mbedtls_aes_test
测试内容:测试 AES 的 ECB、CBC 和 CTR三种模式。验证解密后的数据是否与原始数据一致。
SHA测试
函数:mbedtls_sha_test
测试内容:测试 SHA-1、SHA-256 和 SHA-512 三种哈希算法。对输入数据进行哈希计算,输出哈希值
示例输出:
===========================
SHA-1 test #1: passed
SHA-1 test #2: passed
SHA-1 test #3: passed
SHA-224 test #1: passed
SHA-224 test #2: passed
SHA-224 test #3: passed
SHA-256 test #1: passed
SHA-256 test #2: passed
SHA-256 test #3: passed
SHA-384 test #1: passed
SHA-384 test #2: passed
SHA-384 test #3: passed
SHA-512 test #1: passed
SHA-512 test #2: passed
SHA-512 test #3: passed
=========== ecdh test ================
setup rng ... ok
select ecp group SECP256R1 ... ok
Get public key time=33ms
1. ecdh client generate public parameter:
04 BC C2 58 06 F0 C1 A2 AC 83 C2 4F C5 CD 9C ED
A8 C3 8D C1 CF 3E 5B 52 0C 81 E1 50 15 D2 FE A1
AE 30 62 A9 6F E3 72 97 3B E0 12 A4 EC C2 2F 22
63 E3 AC 81 91
..........
aes ctr 192 block:1000 enc cost time:331 us
aes ctr 192 block:1000 dec cost time:329 us
test aes ctr 256
aes ctr 256 block:1000 enc cost time:354 us
aes ctr 256 block:1000 dec cost time:354 us
=========== sha test ================
sha1 block:1000 cost time:415 us
sha256 block:1000 cost time:268 us
sha512 block:1000 cost time:236 us
mbedtls test success
Demo:memheap
Demo介绍:
该demo主要测试申请和释放 内存memory 的功能是否正常。在当前代码下,程序会不断申请释放 无休止直到将内存消耗殆尽。
保存在 SDK 下的: bouffalo_sdk/examples/memheap
示例输出:
ptr :hello123456789123456789123456789
get memory :411520 byte
free memory :411520 byte
remain 25244 byte
ptr :hello123456789123456789123456789
get memory :411648 byte
free memory :411648 byte
remain 25116 byte
ptr :hello123456789123456789123456789
get memory :411776 byte
free memory :411776 byte
remain 24988 byte
......
ptr :hello123456789123456789123456789
get memory :433920 byte
free memory :433920 byte
remain 2844 byte
ptr :hello123456789123456789123456789
get memory :434048 byte
free memory :434048 byte
tlsf malloc 434176 bytes failed at function bflb_malloc using heap base:0x62fc5554
remain 436900 byte
try to get 434176 byte memory failed!
memheap test fail
Demo:partition
Demo介绍:
该demo主要测试分区表获取和输出。所以这里主要要烧录whole bin,否则没有烧录分区表会导致失败。
示例输出:
======= PtTable_Config @0x62fc3cc8=======
magicCode 0x54504642; version 0x0000; entryCnt 8; age 0; crc32 0xE38928F3
idx type device active_index name Address[0] Address[1] Length[0] Length[1] age
[00] 16 0 0 Boot2 0x00000000 0x00000000 0x0000e000 0x00000000 0
[01] 00 0 0 FW 0x00010000 0x00210000 0x00200000 0x00168000 0
[02] 10 0 0 mfg 0x00210000 0x00000000 0x00168000 0x00000000 0
[03] 02 0 0 media 0x00378000 0x00000000 0x00071000 0x00000000 0
[04] 03 0 0 PSM 0x003e9000 0x00000000 0x00008000 0x00000000 0
[05] 04 0 0 KEY 0x003f1000 0x00000000 0x00002000 0x00000000 0
[06] 05 0 0 DATA 0x003f3000 0x00000000 0x00005000 0x00000000 0
[07] 06 0 0 factory 0x003f8000 0x00000000 0x00008000 0x00000000 0
其中: 索引的 0 和 1 分别代表不同的区,一个是活跃的当前正在使用的,另一个是备份的用于当升级失败回滚的。
Demo:efuse_trim
Demo介绍:
该Demo主要用于验证efuse中储存的修剪数值是否正确,这些修剪值用于矫正一些模块。
保存在SDK下 : bouffalo_sdk/examples/peripherals/efuse/efuse_trim
代码解读:
- 初始化和设备获取:
- 调用
board_init()初始化硬件板级配置。 - 使用
bflb_device_get_by_name("ef_ctrl")获取 eFuse 控制设备的句柄。
- 调用
- 修剪值读取和验证:
- 定义了一个数组
trim_list,然后遍历trim_list,调用bflb_ef_ctrl_read_common_trim读取每个修剪值。 - 如果修剪值有效,则进一步验证其奇偶校验。如果校验通过,打印修剪值;否则提示校验错误。
- 如果修剪值无效,提示未找到。
- 定义了一个数组
示例输出:
===========================
uart sig1:ffffffff, sig2:0000f32f
clock gen1:9ffffffd, gen2:0fff0c11
xtal:40000000Hz(crystal)
board init done
===========================
eFuse read trim value case!
trim rc32m value=108!
trim rc32k value=273!
trim tsen value=2149!
case finished!
Demo:i2s_es8311
该Demo的主要用途是实现音频数据采集和播放。主要功能是初始化并配置 I2S 接口和 ES8311 音频编解码器,以实现音频数据的传输和处理。
保存在SDK下:bouffalo_sdk/examples/peripherals/i2s/i2s_es8311
代码解读:
- 硬件初始化:调用
board_init()初始化硬件板级配置。初始化 GPIO 引脚i2s_gpio_init(),为 I2S 和 I2C 接口分配功能引脚。 - 主时钟输出:调用
mclk_out_init()配置 I2S 的主时钟输出,为外部音频设备ES8311提供时钟信号。 - ES8311 音频编解码器初始化:配置 ES8311 的工作模式。调用
es8311_init()初始化 ES8311,并设置音量。启动 ES8311 的 ADC 和 DAC 模块。 - I2S 和 DMA 初始化:调用
i2s_dma_init()初始化 I2S 接口和 DMA 通道。配置 DMA 通道,启动 DMA 通道,开始音频数据的传输和接收。
示例输出:
===========================
es8311 init
read chip id failed!
SET: volume:70%
i2s init
dma init
dma lli init
tx dma lli num: 2
rx dma lli num: 2
tc done
rx done
tc done
rx done
tc done
rx done
tc done
rx done
Demo:printf
该demo主要测试基本printf功能是否完整,正常。
保存在SDK 下:bouffalo_sdk/examples/printf
测试的主要功能包括:
- 格式化标志(Flags)测试:
test_space_flag: 测试空格标志( )的格式化test_plus_flag: 测试加号标志(+)的格式化test_zero_flag: 测试零填充标志(0)的格式化test_minus_flag: 测试左对齐标志(-)的格式化test_sharp_flag: 测试井号标志(#)的格式化
- 宽度和精度测试:
test_width: 测试基本宽度指定test_width_20: 测试20字符宽度的格式化test_padding_20: 测试20字符填充test_padding_dot_20: 测试带小数点的20字符填充
- 数值类型测试:
test_integer_types: 测试各种整数类型(int, long, long long等)test_floating_point_specifiers_precision_and_flags: 测试浮点数的精度和标志test_pointer: 测试指针类型的打印
- 特殊情况测试:
test_infinity_and_not_a_number_values: 测试无穷大和NaN值的打印test_tiny_floating_point_values: 测试极小浮点数的打印
- 字符串相关测试:
test_string_length: 测试字符串长度限制打印
示例输出:
test 26 begin >>>>>>>>>>>
53000atest-20 bit
53000atest-20 bit
0.33
0.33
1
1
foo
foo
00004
00004
hi x
hi x
00123
00123
-67224.546875000000000000
-67224.546875000000000000
0.33
0.33
3.33e-01
3.33e-01
0.000000e+00
0.000000e+00
-0.000000e+00
-0.000000e+00
test 26 end >>>>>>>>>>>>>
test 27 begin >>>>>>>>>>>
30 30 30 30
30 30 30 30
30 30 30 30
30 30 30 30
-9223372036854775807 -9223372036854775807 -9223372036854775807 -9223372036854775807
-9223372036854775807 -9223372036854775807 -9223372036854775807 -9223372036854775807
9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807
9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807
-9223372036854775807 -9223372036854775807 -9223372036854775807 -9223372036854775807
-9223372036854775807 -9223372036854775807 -9223372036854775807 -9223372036854775807
9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807
9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807
281474976710656 281474976710656 281474976710656 281474976710656
281474976710656 281474976710656 281474976710656 281474976710656
18446744073709551615 18446744073709551615 18446744073709551615 18446744073709551615
18446744073709551615 18446744073709551615 18446744073709551615 18446744073709551615
1234567891234567 1234567891234567 1234567891234567 1234567891234567
1234567891234567 1234567891234567 1234567891234567 1234567891234567
test 27 end >>>>>>>>>>>>>
test 28 begin >>>>>>>>>>>
30 30 30 30
30 30 30 30
30 30 30 30
30 30 30 30
-9223372036854775807 -9223372036854775807 -9223372036854775807 -9223372036854775807
-9223372036854775807 -9223372036854775807 -9223372036854775807 -9223372036854775807
9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807
9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807
-9223372036854775807 -9223372036854775807 -9223372036854775807 -9223372036854775807
-9223372036854775807 -9223372036854775807 -9223372036854775807 -9223372036854775807
9223372036854775807 9223372036854775807 9223372036854775807 9223372036854775807
9223372036854775807 9223372036854775807 9223372036854775807 -9223372036854775807
281474976710656 281474976710656 281474976710656 281474976710656
281474976710656 281474976710656 281474976710656 281474976710656
18446744073709551615 18446744073709551615 18446744073709551615 18446744073709551615
18446744073709551615 18446744073709551615 18446744073709551615 18446744073709551615
1234567891234567 1234567891234567 1234567891234567 1234567891234567
1234567891234567 1234567891234567 1234567891234567 1234567891234567
test 28 end >>>>>>>>>>>>>
Demo Shell:
该部分代码测试了在 裸机 和 带freertos操作系统两种情况下串口的终端功能测试。
这部分代码存放在SDK的 bouffalo_sdk/examples/shell 路径下。
Demo:shell_os
burst wrap cmd 0x77
===========================
uart sig1:ffffffff, sig2:0000f32f
clock gen1:9ffffffd, gen2:0fff0c11
xtal:40000000Hz(crystal)
board init done
===========================
bouffalolab />
bouffalolab />
bouffalolab />help
shell commands list:
test
free
memtrace
help
mfg
reboot
sysver
bouffalolab />
Demo:shell_no_os
===========================
uart sig1:ffffffff, sig2:0000f32f
clock gen1:9ffffffd, gen2:0fff0c11
xtal:40000000Hz(crystal)
board init done
===========================
bouffalolab />
bouffalolab />
bouffalolab />
bouffalolab />help
shell commands list:
test
free
memtrace
help
ps
mfg
reboot
sysver
bouffalolab />
Demo:pmu
Demo介绍:
这部分Demo主要测试了开发板的两种休眠模式。Hibernation 休眠模式 和 Power down sleep 深度休眠模式,其中,HBN 是更深层次的休眠每次唤醒都从头执行,除了SRAM保持区其余都不储存。 适合长时间关机,实时性低。
而 PDS 是中层次的休眠,唤醒从断线执行,而且保留寄存器,SRAM 和 部分外设的信息。 适合段是关机,比如每秒唤醒一次,实时性更高。
保存在SDK下:bouffalo_sdk/examples/pmu/xxxx/其中 xxxx 是开发板对应的型号。
Demo:hbn_rtc:
qe write len 0x02
cread support 0x01
cread code 0x20
burst wrap cmd 0x77
===========================
uart sig1:ffffffff, sig2:0000f32f
clock gen1:9ffffffd, gen2:0fff0c11
xtal:40000000Hz(crystal)
board init done
===========================
enter hbn mode
Demo:pds_rtc:
ead reg cmd1 0x35
write reg cmd0 0x01
write reg cmd1 0x01
qe write len 0x02
cread support 0x01
cread code 0x20
burst wrap cmd 0x77
===========================
uart sig1:ffffffff, sig2:0000f32f
clock gen1:9ffffffd, gen2:0fff0c11
xtal:40000000Hz(crystal)
board init done
===========================
enter pds mode
这两个Demo 中有配有RTC,会不断的唤醒和睡眠。
Demo:wo
Demo介绍:
保存在SDK 下:bouffalo_sdk/examples/peripherals/wo/wo_int
该Demo测试了博流Bouffalo芯片中WO(Waveform Output)外设的中断功能。
测试包括:
- WO外设的三种中断类型的触发和处理
- WO外设的配置参数设置
- 不同数据量下的FIFO操作
- 中断屏蔽和解除屏蔽功能
- WO外设的使能和禁用功能
示例输出:
===========================
uart sig1:ffffffff, sig2:0000f32f
clock gen1:9ffffffd, gen2:0fff0c11
xtal:40000000Hz(crystal)
board init done
===========================
interrupt end!
interrupt fifo!
interrupt fifo!
interrupt fer!
interrupt fer!
