如何在 Wio Terminal 上运行 RT-Thread 操作系统

news2024/11/27 14:34:11

Wio Terminal 是 Seeed Studio 设计的一款开发套件。它基于 SAMD51 的微控制器,运行速度为 120MHz(最高可达 200MHz),拥有 4MB 外部闪存和 192KB RAM,具有 Realtek RTL8720DN 支持的无线连接,同时支持蓝牙和 Wi-Fi 功能,是物联网项目的一个不错选择。并且它使用 Arduino IDE 就可以进行开发,新手也可以非常容易上手。

但是,基于 Arduino 的开发也有一些缺点,比如无法调试、无法使用多线程编程、不利于理解底层代码深入学习嵌入式开发、难以进行系统优化等等。于是,我在想能不能在 Wio Terminal 上运行 RT-Thread 操作系统?使用 RT-Thread 强大的软件生态进行开发呢?

说干就干!经过两个周末的折腾,我终于实现了将 RT-Thread 移植到 Wio Terminal 上。那么,本文就来介绍我是如何实现这个目标的。

背景知识

开始之前,我们先来了解一些相关概念,以便顺利完成本次实验。

SAM 系列芯片

Microchip ATSAM 系列芯片在各种工业、消费类和汽车领域有广泛应用。Arduino 开发板常用的芯片就是 Atmel 公司生产的 AVR 和 SAM 系列微控制器。而我们这里用到的 Wio Terminal,它的主控制器是 ATSAMD51P19A-U

我们先来看看这个 SAM 芯片家族,下面是数据手册提供的说明。其中,ATSAMD51P19 就表示核心是 Cortex-M4F(不含 CAN 和 Ethernet 外设)、Flash 容量 512 KB,管脚共 120/128 个(具体和封装有关)。

Atmel START

Atmel START 是一款可对 SAM 和 AVR 微控制器项目进行直观的图形配置的在线工具,作用类似于 ST 的 STM32CubeMX 工具。由于 Atmel START 以 SaaS 形式提供服务,所以我觉得更加方便。

Atmel START 基于最新一代的高级软件框架 ASF4。使用 Atmel START,你可以选择和配置软件组件、驱动程序和中间件,以及专门根据你的应用程序需求定制的完整示例项目。

通过图形引脚复用和时钟配置,你可以轻松地将软件和驱动程序与你使用的硬件布局相匹配。配置阶段还会检查软件组件之间的依赖关系、冲突和硬件约束。如果发生冲突,Atmel START 会自动建议适合你特定设置的解决方案。

ASF4

ASF4 全称 Advanced Software Framework Version 4,它是 Microchip 提供的一套外设驱动程序、中间件和软件应用程序等软件组件的集合。该框架支持 Microchip 的 SAM 系列微控制器。

Microchip Studio

Atmel Studio 是 Atmel(现在是 Microchip)公司推出的一款集成开发环境(IDE),专门用于嵌入式系统的开发。提供了丰富的工具和功能,以支持 Atmel 微控制器的编程、调试和部署。Atmel Studio 支持多种编译器,包括 GCC 和 IAR 编译器,可用于生成最优化的代码。支持多种编程语言,包括 C、C++ 和汇编语言。开发者可以根据自己的需求选择最合适的编程语言来编写他们的应用程序。

由于 Atmel 被 Microchip 收购了,所以 Atmel Studio 也更名为 Microchip Studio。它整合了 Atmel Studio 的功能,并扩展支持了更多 Microchip 微控制器系列,包括 PIC 系列等。

我们这里使用最新的 Microchip Studio 7.0,你可以在这里下载。

Atmel ICE Programmer

Atmel-ICE 是 Microchip 新推出的功能强大的调试编程工具,适用于 Atmel ARM Cortex-M 的 SAM 和 AVR 系列芯片。

Atmel-ICE 支持的软件:

  • 支持 MIcrochip Studio 6.2 以上版本
  • 支持 ICC8AVR 以上版本
  • 支持烧录 ICCAVR、CVAVR、IAR 等生成的 HEX 文件

本次实验将使用 MIcrochip Studio + Atmel-ICE 来完成 RT-Thread 固件烧录。

搭建工程

下载源代码

我已经完成 RT-Thread 的移植了,你可以从我的 GitHub 分支拉取移植好的 rt-thread 工程,这样就能快速启动你的 Wio Terminal。

git clone -b microchip https://github.com/luhuadong/rt-thread.git

国内的小伙伴也可以从 Gitee 下载,这样会更快一点。

git clone -b microchip https://gitee.com/luhuadong/rt-thread.git

Wio Terminal 对应的 BSP 位于 bsp/microchip/samd51-seeed-wio-terminal 目录。

编译 BSP

目前仅提供在 Windows 下通过 Env 工具编译。使用 Env 工具打开 samd51-seeed-wio-terminal 目录,输入 scons 即可编译该 BSP 工程。

因为我已经事先配置好工程了,因此你不需要执行 menuconfig 配置即可编辑。当然,你也可以执行 menuconfig 命令对该 BSP 工程进行重新配置,添加你想要的组件或软件包。

创建工程

打开 Microchip Studio,依次选择 File -> Open -> Open Object File For Debugging,打开工程配置窗口。

选择刚刚编译好的 rt-thread-samd51.elf 文件,设置项目名称,以及工程目录,如下图所示。

点击 Next,选择对应芯片型号 ATSAMD51P19A,如下图所示。

点击 Finish 完成 Microchip Studio 工程配置。

烧录调试

硬件改造

Wio Terminal 默认只提供了 USB 接口通过 Arduino IDE 开发,通过查阅 Wio Terminal 电路图,我们发现 PCB 上有预留 SWD 调试接口。

一种方式是以 Grove 接口提供,对应 Wio Terminal 正面左侧的 I2C Grove 接口。不过需要在 PCB 上 R33 和 R34 位置焊接 0Ω 电阻可以使用。

另一种方式是以测试触点提供的接口,如下图左侧所示。

在实验过程中,我尝试通过电烙铁和热风枪的方式将两颗 0Ω 电阻焊接上去,因为使用的是 0402 尺寸电阻,所以对没有硬件经验的同学操作起来有一定难度。

首先,拆开 Wio Terminal 外壳。提示:Wio Terminal 的两颗螺丝隐藏在背面左上角和右下角的两个垫片下。

拆开后取出 PCB 板,找到 R33 和 R34 焊盘位置,将两颗 0Ω 电阻摆放好。

由于位置刁钻,建议使用热风枪调至 300 ℃ 左右慢慢将其焊接好。另一个方法是先把 Grove 座子焊下来,腾出空间用电烙铁将 0402 电阻焊上。提示:焊接完一定要检查是否虚焊。

如果你觉得 0402 电阻难度太大,也可以尝试直接用导线将测试触点引出来。需要注意的是,由于测试触点不是专用的焊盘,表面没有涂锡,因此操作的时候要特别小心,不要焊太久,否则很容易像我这样把铜片都焊掉了 (⊙﹏⊙)b

后来我找到了一种专用于烧录的“顶针夹具”,应该是最方便的了,不需要焊接,直接夹上就可以用了!不过,大家要注意要选择 2.0mm 的,而不是 2.54mm 的。

连接 Atmel ICE

解决了硬件问题,接下来就可以连接 Atmel ICE 啦。这里用到的是 SWD(Serial Wire Debug)接口,需要连接四根线,SWDIO、SWCLK 以及 VCC 和 GND,分别是对应 2、4、1、3 端口。

连接好 Atmel ICE 之后,点击 Microchip Studio 菜单栏中的 Tools -> Device Programming,打开 Device Programming 窗口。

此时,你可以在 Interface settings 选项卡中,Tool 下拉框选择 Atmel-ICE 调试器,点击 Apply 按钮。如果连接正常,点击右侧的 Read 按钮,可以读取设备签名信息和电压值。

擦除 Bootloader

想要将 RT-Thread 固件写入 Wio Terminal,还有一个非常关键的地方 —— 擦除设备原先的 Bootloader 程序。

点击左侧 Fuses 选项卡,然后找到 NVM 控制寄存器 USER_WORD_0_NVMCTRL_BOOTPORT 配置项,可以看到当前设置为 16 KB。也就是说,Flash 的前 16 KB 被用于存放 Bootloader 程序了。

我们需要将其改为 0 KB,然后点击 Program 按钮保存修改。这样,Bootloader 占用的 Flash 空间就不再受保护。

接着,在 Memories 选项卡中,选择 Erash Chip,点击 Erase now,擦除整片 Flash。

等待擦除完毕,你就可以写入新的固件啦!

烧录程序

回到 Microchip Studio 主界面,在工具栏点击“小锤子”按钮,如下图 ① 所示。选择 Tool 选项卡,设置调试器为 Atmel-ICE,接口为 SWD,保存配置。

然后点击工具栏中“绿色小三角”按钮,如下图 ④ 所示,将固件 rt-thread-samd51.elf 下载到 Wio Terminal,并进入调试模式。

在实验过程中,我们发现第一次烧录可能会出现“Launch Failed”错误导致无法烧录成功。解决方法是拉下 Wio Terminal 左侧的 Reset 开关,然后松开,立即点击“小三角”按钮(或者 F5 键)。

如果失败了,多尝试几遍,并检查连线是否正常。多点耐心,一定会成功的。

运行测试

当固件烧录成功后,就会进入调试模式。你可以在工程代码中打上一些断点,检查 RT-Thread 程序是否正常运行。

在这个 BSP 中,我们配置了一个 LED 设备、一个 UART 串口设备,以及一个 USB CDC 设备。在 RT-Thread 程序中,我们启动一个线程用于循环控制 LED 灯亮灭。因此,当 main 函数运行起来后,你会看到 Wio Terminal 板载的蓝色 LED 灯开始闪烁。

该 BSP 默认配置 uart0 为 RT-Thread 的 Finsh 控制台,uart0 对应的引脚在 Wio Terminal 背面 40 pin 接口上,如下图所示。

使用 USB 转 TTL 串口模块连接该串口,打开任意一款串口终端工具,配置串口参数为 115200 N 8 1。当 RT-Thread 固件启动后,可以在终端上看到熟悉的打印,这意味着 RT-Thread 系统已经在 Wio Terminal 上跑起来了。

现在,你可以尝试输入 RT-Thread 内置的命令,查看系统信息。例如 ps 命令查看系统当前有多少个任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1055968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

京东数据报告:2023年8月京东手机行业品牌销售排行榜

鲸参谋监测的京东平台8月份手机市场销售数据已出炉! 根据鲸参谋电商数据分析平台的数据显示,8月份,京东平台手机的销售量为380万,环比下滑约7%。同比下滑约17%;销售总额为120亿,环比下滑约17%,…

开启赏车新体验 远航汽车即将亮相2023中国(天津)国际汽车展览会

2023年9月28日至10月4日,2023中国(天津)国际汽车展览会将在国家会展中心(天津)举行。本次车展预计展出总面积20万平方米,是本年度北方地区规模最大、品牌最齐全的国际顶级车展。远航汽车将携旗下多款车型亮…

c#设计模式-结构型模式 之 装饰者模式

🚀介绍 在装饰者模式中,装饰者类通常对原始类的功能进行增强或减弱。这种模式是在不必改变原始类的情况下,动态地扩展一个对象的功能。这种类型的设计模式属于结构型模式,因为这种模式涉及到两个类型之间的关系,这两个…

Java编程技巧:分类

1、表结构 字段名称字段类型字段解释idvarchar主键idnamevarchar分类名称sequenceint同级排序parentvarchar父级分类id,一级分类的父级分类id为0pathvarchar分类id路径,中间用英文逗号,分隔,方便使用find_in_set函数搜索namePathvarchar分类…

90、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Hash 相关命令

本次讲解要点: Hash 相关命令:是指value中的数据类型 启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe red…

Linux系统下C语言实现百度网盘(附实现步骤,和全部代码讲解)

Linux系统下C语言实现百度网盘 Linux操作系统下用C语言写一个网盘完整代码:服务器客户端 Linux操作系统下用C语言写一个网盘 本次实验完成了完整的网盘功能(查询文件,下载文件,上传文件,刷新界面,和退出系…

服务器流量只有1tb,害怕被刷怎办,这篇文章教你防止对方刷流量!

本篇文章主要讲解,服务器流量监控和关闭网络请求的方法教程,在某种情况下可以有效杜绝被刷流量的困扰。 日期:2023年10月2日 作者:任聪聪 根本有效避免刷流的前置办法 说明:只选择固定带宽,不限流量的服务器…

【Linux进行时】进程地址空间

进程地址空间 例子引入&#xff1a; 我们在讲C语言的时候&#xff0c;老师给大家画过这样的空间布局图&#xff0c;但是我们对它不了解 我们写一个代码来验证Linux进程地址空间 #include<stdio.h> #include<assert.h> #include<unistd.h> int g_value100; …

【吞噬星空】连播两集,尼赫鲁对徐欣动手,罗峰修分身强势复仇

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析吞噬星空资讯。 吞噬星空动画第四季定档之后&#xff0c;官方真的是太宠粉了&#xff0c;每天都会公布全新预告情报&#xff0c;无论是外星人物角色&#xff0c;亦或者宇宙星球建模&#xff0c;那都是相当的炸裂。如今更…

《CTFshow-Web入门》10. Web 91~110

Web 入门 索引web91题解总结 web92题解总结 web93题解 web94题解 web95题解 web96题解 web97题解 web98题解 web99题解总结 web100题解 web101题解 web102题解 web103题解 web104题解 web105题解总结 web106题解 web107题解 web108题解 web109题解 web110题解 ctf - web入门 索…

怒刷LeetCode的第22天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;回溯算法 方法二&#xff1a;基于位运算的回溯 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;动态规划 方法二&#xff1a;分治法 方法三&#xff1a;前缀和数组 第三题 题目来源 题目内容…

通讯网关软件014——利用CommGate X2HTTP实现HTTP访问OPC Server

本文介绍利用CommGate X2HTTP实现HTTP访问OPC Server。CommGate X2HTTP是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;SCADA系统配置OPC Server&#xff0c;现在上位机需要通过Http Client…

Springboot+Vue+Mysql实现模拟汽车保养系统(附源码)

前言 本项目基于springbootvue搭建的汽车保养的系统&#xff0c;页面较为粗糙&#xff0c;前端好的小伙伴可自行优化。 项目环境 -环境框架后端JDK1.8SpringBootmybatisPlus前端NodeJS16.0Vue2.0ElementPlus数据库MySQL8.0- 数据库设计 数据表备注banner轮播图表car用户汽…

树的表示——孩子兄弟表示法

从图中可以看出&#xff0c;树的每个结点&#xff0c;都有不确定的指向他们的孩子的节点&#xff0c;如果我们定义这样一个结构体来便是数的结构的话&#xff1a; struct TreeNode { int val; struct TreeNodep1; struct TreeNodep1; … }; 是不能够表示一棵树的&#xff0c;因…

可视化 | (一)数据基础及基本数据可视化方法

​ 文章目录 &#x1f4da;数据可视化的基本流程&#x1f4da;数据属性&#x1f4da;基本可视化图表类型&#x1f407;数据分析三规则&#x1f407;条形图&#xff08;Bar Chart&#xff09;&#x1f407;饼图&#xff08;Pie Chart&#xff09;&#x1f407;衡量易变性 (meas…

计算机网络(一):概述

参考引用 计算机网络微课堂-湖科大教书匠计算机网络&#xff08;第7版&#xff09;-谢希仁 1. 计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成为一种重要的信息服务基础设施计算机网络已经像水、电、煤气这些基础设施一样&#xff0c;成为我们生活中不可或…

CleanMyMac X4.14.1最新和谐版下载

CleanMyMac一款macOS上非常经典的清理工具。它可以帮助用户清理垃圾文件、卸载无用应用程序、优化系统性能等。旨在帮助用户提高系统性能、释放磁盘空间并保持Mac的健康状态。 下面是CleanMyMac X软件的主要特点&#xff1a; 系统垃圾&#xff1a;清理您的系统来获得最大的性能…

CocosCreator3.8研究笔记(二十四)CocosCreator 动画系统-动画编辑器实操-关键帧实现动态水印动画效果

上一篇&#xff0c;我们介绍了动画编辑器相关功能面板说明&#xff0c;感兴趣的朋友可以前往阅读&#xff1a; CocosCreator3.8研究笔记&#xff08;二十三&#xff09;CocosCreator 动画系统-动画编辑器相关功能面板说明。 熟悉了动画编辑器的基础操作&#xff0c;那么再使用动…

Three.js:打造独一无二的3D模型可视化编辑神器!

前言 1.因为之前工作过的可视化大屏项目开发3d大屏组件模块需要用到Three.js来完成&#xff0c;其主功能是实现对3d模型的材质&#xff0c;灯光&#xff0c;背景&#xff0c;动画。等属性进行可视化的编辑操作以及模型编辑数据的存储和模型在大屏上面的拖拽显示 2.因为是第一…

不能显式拦截ajax请求的302响应?

记录工作中早该加深印象的一个小小小case&#xff1a;ajax请求不能显式拦截 302响应。 我们先来看一个常规的登录case: 1. 浏览器请求资源&#xff0c;服务器发现该请求未携带相关凭据&#xff08;cookie或者token&#xff09;2. 服务器响应302&#xff0c;并在响应头Location写…