简单测评衡山派
衡山派内测文档
10/31-11/7
一、引言
衡山派开发板是由立创开发板携手匠芯创共同推出的新一代开发板,采用匠心创RISC-V核心MCU:D133EBS芯片,性能优越,国产自主,广泛应用于工业和智慧家居领域。板载WIFI芯片,丰富的屏接口,内置RT-Thread加速物联网项目的开发,立创开发板详细的教程文档,配合上技术指导群,是学生开发学习、业余电子爱好者、专业从业者的强大助力!
内测缘由
任何成功不是一蹴而就的,经历千锤百炼方能炼出真金,我是一名学生,了解RTOS相关知识,加入内测为帮助找出开发板的瑕疵之处,亦或者是技术文档稍显不足之处,同时在立创开发技术人员的帮助下,边测试边完善自己的开发经历。 立创开发板目标用户中较大部分是高校学生,而其中又以只了解一点或者小白居多。我即是目标用户(购买过9款立创开发板),又对RT-Thread和D13芯片完全不了解,同时又具备有开发FreeRTOS的经验,适合以小白的身份测试开发板,因为有RTOS经验,能更快上手,又不至于卡住耽误测试计划。
二、测试计划
基于对自身实力的了解,实事求是,旨在说到做到,刚开始我制定的测试计划是:“测试基础外设,以小白的身份边学习边测试,用文档记录自己的学习过程,和踩坑记录及解决办法”这只是我的保底计划,也是必须完成的。在此基础上,有空余的时间我会测试其余感兴趣的部分,和自己能力能够完成测试的部分。
在10月31号早上,正式收到衡山派,在下午发布教程文档后将编译环境搭建完成。并且初步了解文档构成和内容。
11月1日到3日,完成绝大部分基础的测试。11月4日,开始编写记录文档框架,并将内测过程和建议记录其中。开始测试自己感兴趣的其他外设和移植手册。11月5日完成绝大部分文档的编写和文档中的测试内容,测试无线网络和MAC部分。11月6日,接着测试MAC,并将文档内容补齐。11月7日,审核文档,简单排版,结尾,提交。
“我将会记录我作为一个初学者解决问题的过程和踩坑的地方。因为是大三学生,有大量的空余时间,我会在一个月内(实则7天)试着实现基础外设等功能,并用文档记录”正如我所说的,上面的内容为我本次内测的重点 “其实主要就是基本外设的使用和我响测试的一些小测试” ————问卷原话
因为教程文档已经很完善,所以记录学习过程就经过精简,主要记录对开发人员更有用的内容:内测时遇到的问题,和解决办法,以及文档中可以改善的部分。这些重要内容我在索引出处重点标注。
三、测试过程
我将按照我学习的流程,把我部分的内测过程和遇到的全部问题和解决方案亦或者踩坑记录罗列下来,希望能对衡山派的成功贡献一份微薄的力量。 大致是按照文档中的流程,在有关联的地方穿插着测试和记录。
终端窗口****-env
list****指令:

列出板级配置文件,每个文件都为专用文件,在rt-thread的源代码上进裁剪适配板子的硬件设施,如内存,基础外设类目、数量等。后续的编写程序,编译工程文件都是在这个板级配置文件的基础上进行增删改。所以此文件极为重要,是基础中的基础
选择第三项配置:
d13x_JLC_rt-thread_helloworld
为衡山派移植RT-Thread的专用板级配置文件!!!
lunch 3****:

加载板级配置文件到终端,接下来的编写代码,配置工程都是链接这个文件进行
简洁指令 i****:

查看板级工程配置文件的基本信息,列出当前配置,列出当前工程的基本配置。
可以看到罗列出了主程序所在文件的位置,芯片的型号为D13x系列,内核是riscv32,板子标签是JLC,采用RT-Thread作为系统,还有各个文件引用的目录和输出的目录****~~
Vscode 中打开终端****env

成功连接到env,并打印信息
scons -j16:

构建工程,输出镜像文件
关于env相关教程文档


如上图,若是按照文档完完全全输入-list-def指令,终端并不能识别这个指令。
经过测试,-list-def和list-def都是不能被识别的指令
正确的指令格式应该为:list -def
开头没有“-”,list和-def中间必须空格间隔开。
关于env指令教程文档

文档中进入menuconfig指令如上图“-menuconfig”
实则我试验:

直接输入“-menuconfig”指令不能被识别。
这时候在文档中往上翻可以得知该指令前面需要加“scons”
所以最终应该输入的指令是“scons -menuconfig”吗?

试试?看上面截图得知,实则不然,该指令仍不是配置menuconfig的指令
可以看到终端打印的信息是Remove output.......,我猜测可能该指令是将所有编译输出文件移除/清除了。所以最终正确的指令是什么?
我尝试了几次后得知正确进入menuconfig的指令格式为:
“scons --menuconfig”


输入“scons --menuconfig”指令,成功进入menuconfig配置界面
虽然和“scons -menuconfig”指令只差了个“-”,但确是完全不同类型的指令。

再看文档中的指令,不够明确。“-”的数量漏了一个。可以注明“--”的数量将导致执行不同的指令
MobaXterm****嵌入式终端软件

遇到的问题

该串口终端软件下载地址由于是国外网站,下载了计次均因为网络问题下载失败,试着上网也无济于事,最后在b站搜索下载链接在百度网盘下载。

按照文档配置串口调试配置
成功连接串口终端
list命令:罗列list****条目下可执行的命令

list_timer****命令:
显示RT-Thread中timer相关信息

list_thread****命令:
显示正在运行的进程信息


可以看到此时正在执行led_thread的线程

回到led.c文件可以看到led闪烁的线程名就是led_thread,对应上串口终端输出的线程信息
由此可以对照验证串口打印信息的可靠性
list device****命令:
打印注册器件的信息(截图省略一部分器件)

实测使用文档中中出现的list_de指令无效,需要使用list device指令
关于MobaXterm出现的一些问题,及解决方案

这串口终端软件,相同的端口一次只能运行一个调试窗口,若是窗口正在使用com7,在新窗口调用同端口com7就会报错,这是串口调试类软件的特点,一个端口只能被一个目标调用

连接后回车不显示aic />的问题。
解决方案:1、重新拔插串口,并确保串口端口和波特率等配置无误。2、重新打开串口终端软件。3、检查是否因为menuconfig配置干扰了UART0——Debug的回传。可以通过重新烧录无变更的例程编译构建的镜像文件验证。
烧录镜像踩的坑


用拓展坞连接开发板板,软件识别不到开发板进入下载模式

解决方案:方法1、直接连接电脑A口,可以让软件成功识别板子,然后烧录镜像
猜测:算是一个隐性的bug,可能是拓展坞电流不够?之前stm32接拓展坞进行数据传输没问题
群友也出现相同的问题,但确是不同的解决方案:方法2、使用管理员模式打开烧录软件。
我试用方法二行不通,只能使用方法一:拔掉拓展坞,直接接电脑烧录。
访问PIN设备

C++ 获取引脚编号 RT-Thread 提供的引脚编号需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由 PIN 设备驱动程序定义,和具体的芯片相关。有3种方式可以获取引脚编号: API 接口获取、使用宏定义或者查看PIN 驱动文件。 1、获取引脚编号: 使用 rt_pin_get() 获取引脚编号,如下获取 PF9 的引脚编号: pin_number = rt_pin_get("PF.9"); 以__STM32_PIN(2, A, 15)为例,2 为 RT-Thread 使用的引脚编号,A 为端口号,15 为引脚号,所以 PA15 对应的引脚编号为 2。 2、设置引脚模式 void rt_pin_mode(rt_base_t pin, rt_base_t mode); #define PIN_MODE_OUTPUT 0x00 /* 输出 / #define PIN_MODE_INPUT 0x01 / 输入 / #define PIN_MODE_INPUT_PULLUP 0x02 / 上拉输入 / #define PIN_MODE_INPUT_PULLDOWN 0x03 / 下拉输入 / #define PIN_MODE_OUTPUT_OD 0x04 / 开漏输出 / 使用示例如下所示: #define BEEP_PIN_NUM 35 / PB0 / / 蜂鸣器引脚为输出模式 / rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT); 3、设置引脚电平 void rt_pin_write(rt_base_t pin, rt_base_t value); 使用示例如下所示: #define BEEP_PIN_NUM 35 / PB0 / / 蜂鸣器引脚为输出模式 / rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT); / 设置低电平 / rt_pin_write(BEEP_PIN_NUM, PIN_LOW); 3、2读取引脚电平 int rt_pin_read(rt_base_t pin); 示例如下所示: #define BEEP_PIN_NUM 35 / PB0 / int status; / 蜂鸣器引脚为输出模式 / rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT); / 设置低电平 */ rt_pin_write(BEEP_PIN_NUM, PIN_LOW); status = rt_pin_read(BEEP_PIN_NUM);

在文档中:

建议可以加以说明进行区分:
例如:PE17,PA3等带端口为芯片引脚
2,7等纯数字为RT-Thread的引脚编号的表现形式
RT-Thread 提供的引脚编号需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由 PIN 设备驱动程序定义,和具体的芯片相关。
查看PIN设备:

RT-Thread官方文档中介绍可以通过查找 drv_gpio.c 文件的数组来得知芯片的引脚的编号
例如:
__STM32_PIN(2, A, 15)
就是芯片的GPIOPA15引脚,在RT-Thread中的引脚编号为2
![]() |
![]() |
|---|---|
我试着在air_dev_gpio.c中查找该定义引脚编号的数组,并没有找到
但是还可以通过函数获取到芯片引脚的引脚编号
例:
rt_base_t user_led_pin = rt_pin_get("PE.17");
通过rt_pin_get()函数,查找PE17引脚的编号,函数从芯片引脚号字符串推算出一个PIN设备引脚编号,该函数的返回值就是PE17引脚的引脚编号
配置****menuconfig
C语言项目的裁剪配置本质上通过条件编译和宏的展开来实现的,RT-Thread借助Kconfig这套机制更方便的实现了这一功能。当前以Windows下Env工具中的使用为例,简述Kconfig在RT-Thread的工作机制。
Kconfig机制包括了Kconfig文件和配置UI界面(如menuconfig,pyconfig等)。Kconfig机制有如下特点:
• Kconfig文件中的配置项会映射至rtconfig.h中
• Kconfig文件可以随源码分散至各级子目录,便于灵活修改
Env在根目录下执行menuconfig命令后会递归解析各级Kconfig文件,然后提供图形配置界面,完成相应的配置后并保存,根目录下会存在一份.config文件保存当前选择的配置项,并将.config文件转为RT-Thread的系统配置文件rtconfig.h。


env调用图形界面,用户可自由选择配置各模块开关量来进行裁剪,选择性编译构建工程
使用scons --menuconfig命令打开menuconfig配置界面
若是在VSCode打开env终端,且终端的界面大小小于19*80,那么将会无法打开menuconfig配置界面,并输出下图信息


在menuconfig配置界面中拖拽窗口会导致上面的问题,需要关掉配置界面,再重新进入配置界面即可解决该问题
上下左右键移动光标,(y)选择中选项并(enter)确认



这里文档不太完整,漏了:确认是enter,选择是Y,取消选择是N,返回是Esc按键

未在menuconfig中选中USER_LED_ON时,rtconfig没有关于led的预定义

在menuconfig中选中USER_LED_ON时,rtconfig自动添加了关于led的预定义
配置****GPIO
按照PIN设备管理手册,用函数找到LED引脚的编号,在函数中填入编号操作IO口电平,类似其他单片机。
在RT-Thread中还需要编写SConscript文件和Kconfig文件。
第一次将主目录下和次级目录下的SConscript文件复制相同,,led闪烁程序未能执行,也很难检查出问题
修正后----成功电亮led并闪烁

在串口终端查看线程,可以看到led线程正在运行
RT-Thread的这种串口打印调试真的是十分强大呀,第一次体验属实是震惊到我了
全国产,适用物联网,作为一名学习嵌入式的大学生感到自豪,国人伟大的科研人员,还有乐鑫,立创等这些强大的公司
配置****UART
编写完程序,添加上SConscript文件和Kconfig文件。在menuconfig中选择开启UART,保存配置,编译构建烧录。

在uart3.c文件中设置为手动开启uart3,开启指令为“user_led_run”
衡山派接上串口,打开终端软件,输入“user_led_run”指令,回车,开启uart3

成功开启uart3,接收测试:
发送测试: |
![]() |
|---|---|

移植0.96寸OLED,单色屏,IIC协议
在移植了框架后,复制移植各驱动文件,并配置开启menuconfig选项后,在.c文件中查看设备的开启指令

在终端输入指令并回车,成功开启外设


成功移植,查看线程名称

在终端中查看线程信息

串口Debug中可以看到OLED线程的各项参数
测试移植DHT11温湿度传感器

成功移植,让其在终端中打印50次温湿度信息。在终端中第一次输入开启指令,提示没有识别到指令,不知是何原因,猜测可能是设备初始化所需要一段时间。
移植sg90舵机,测试pwm输出


该报错后来检查是因为我还未启用开启sg90的指令,先使用了停止sg90的指令,导致程序卡死,Debug也卡着,只能复位重启

解决该问题后,成功移植sg90
测试使用串口终端来调试和控制GPIO口
使用test_gpio -h来查看指令

让PC7翻转电平15次,并且读取电平状态

![]() |
![]() |
|---|---|
成功使PC7端口led灯闪烁
测试WIFI无线网络
• 配置 SDMC 接口;
• 配置 WiFi 模组;
• 配置 lwIP 协议栈;
• 配置内核;
先使用 scons --menuconfig 命令进行配置各依赖选项,编译构建,烧录镜像入开发板
接上串口,使用串口终端软件调试
wlan wifi_scan//扫描WIFI

wlan wifi_connect SSID PASSWORD // 输入名称,密码,连接wifi


dhcpc WL0 start // 获取IP
ifconfig // 查看当前网卡IP及网关IP

ping 192.168.229.225 // 网关IP为192.168.229.225,ping一下看通路

成功ping通,WIFI网络连接无误
测试MAC
先是跟着文档配置menuconfig,编译

出现报错,关于DVP,需要先关闭DVP和其依赖
![]() |
![]() |
|---|---|
关闭依赖后成功构建,烧录镜像
接入网线后提示:

拔掉网线提示:

ifconfig // 查看当前网卡IP及网关IP

测试电脑ping板卡,先查看板卡地址,电脑终端ping命令板卡网路地址


成功ping通
由于我网线接的是校园网,需要认证上网,故板卡连不上以因特网,但群友已验证板卡可接入因特网,但是由于镜像配置裁剪了解析域名的配置,故不能ping域名,不过至此也可以测得衡山派板卡网卡没问题。
四、总结
匠心创官方资料较少,网络上也几乎没有流传出匠心创D13芯片相关的教程。测试的主要流程参照立创的教程文档,尽管如此,由于立创文档的详细,测试仍是顺利的进行下去。截止至今天,测试结束,在测试的过程中没有遇见芯片级十分重大的bug,更多是使用过程遇到的小问题,这是一件很好的事情,也是我们所期望的。教程文档中仍有地方可以改进,在正式发布版本我相信文档会更加完美。
五、杂谈(不重要)
10月30收到板子,开始内测,截止是在11月8,得在11月7日的时候提交文档。总计8天的测试时间,基本完成了我的内测计划:测试基础外设,将学习和踩坑记录下来。
在板子到达之前,我就在网络上收集关于这块衡山派D13x芯片的资料,去匠心创官网扒资料,也就弄到两份文档,一份D13x_数据手册,一个D13x_用户手册。浅浅看了一下,很是茫然,去b站查找也没找到多少相关的视频,只有匠心创官方寥寥几个视频,看完后麻了。冷门芯片,没啥资料,内测,我不会连灯都点不亮吧?我感觉凉凉。
10月30号,收到板子,欣赏了一下做工,推测了各模块功能,无从下手先放着了。在下午群里发了衡山派教程文档,浅浅看了一眼,感觉又有希望了。于是接下来跟着文档一路狂飙。也是兑现了我的诺言:在课余时间花80%的时间去测试这款板子。
由于对该款芯片的不熟悉,以及开发环境的改变,还有操作内核也和我学的freertos有很大区别,算是从头开始边学边测试。
在这个过程中,立创的教程文档给了我90%以上的助力。文档写的相当详细,虽然也遇到了许多问题,但都一一解决了,并将解决过程和结果记录在此文档。十分感谢群里的伙伴和立创开发人员李兄,帮助我解决了许多测试上的问题。
在11月4日我就完成了大部分的测试,此后的三天,边测边写文档。11月7日文档结尾,审核和提交
如果文章对你有所帮助,可以帮我点一下左下角推荐该文,万分感谢



发送测试:




浙公网安备 33010602011771号