Funpack第11期LPC55S69-EVK上的Micropython移植
基于NXP的LPC55S69-EVK与RT-Thread的Micropython移植,实现串口通信和控制IO口。
标签
Funpack参赛
rt-thread
NXP
lpc55sxx
涵尘者
更新2021-11-02
970

LPC55S69-EVK:

LPCXpresso55S69开发板板载了一颗NXP的LPC55S6x MCU。该电路板还包括一个高性能板载调试器、音频子系统和加速度传感器,提供多个选项,可为网络、传感器、显示器和其他接口添加现成的附加板。

技术和功能规格
微控制器 LPC55S69双核Arm Cortex-M33微控制器运行频率高达100 MHz
存储器
微型SD卡插槽(4位SDIO)
连接
  • 板载高速USB、Link2硬件调试器,支持CMSIS-DAP和SEGGER J-Link协议
  • UART和SPI端口通过板载硬件调试器将目标LPC55S69和USB桥接起来
  • 高速和全速USB端口,具有主机或设备功能可用的微型A/B连接器
调试 支持外部硬件调试器
传感器 恩智浦MMA8652FCR1加速度传感器
音频 立体声音频编解码器,带线路输入/输出
扩展端口
  • MikroEletronika Click扩展选项
  • LPCXpresso-V3扩展选项与Arduino® UNO兼容
  • 兼容PMod的扩展/主机接头
用户组件 3个用户LED,加上复位、ISP (3)和用户按钮

 

LPCXpresso55S69由MCUXpresso工具套件提供完备的支持,该套件提供设备驱动程序、中间件和示例,以实现快速开发,另外还提供配置工具和可选的免费IDE。其还可以使用FreeRTOS与RT-Thread等开源实时操作系统。

 

LPC55S6x MCU

LPC55S6x MCU家族是全球首款基于通用Cortex-M33的微控制器。

该高效率MCU家族采用Armv8-M架构,性能和高级安全功能达到新水平,包括TrustZone-M和协处理器扩展。LPC55S6x家族利用协处理器扩展型号,大幅提高信号处理效率,采用专有DSP加速器,使计算的时钟周期减少了10倍。还可选择使用第二个Cortex-M33内核,支持灵活地平衡高性能与功率效率。

此外,LPC55S6x MCU家族依托基于40nm NVM的处理技术,具备成本效益优势,提供广泛的可扩展封装和存储器选项,并提供强大的支持,包括MCUXpresso软件和工具生态系统及低成本开发板。

 

 

活动任务

第十一期活动的任务是下面四项

任务一:

读取SD卡(SD卡自备)中的音频文件,使用板卡上的3.5mm音频接口播放音乐。

任务二:

读取SD卡中预先存入的图像,显示在屏幕上(OLED或LCD)。

任务三:

实现USB-UART Hub,自己设计通信方式,实现USB到多路UART的收发。

任务四:

移植Micropython,并实现串口通信和控制IO口。

这里我选择了任务四,基于RTT来实现移植Micropython,这也算一个一个取巧的办法吧。RTT已经为我们做好了几乎全部。

 

固件准备:

首先是下载RT-Thread env与RT-Thread的源代码

后依据RT-Thread文档中心的MicroPython 固件开发指南与源代码中的LPC55S69-EVK 板级支持包来进行固件的制作。

首先是用RT-Thread env打开RT-Thread源代码中BSP下的LPC55S69-EVK 板级支持包,这里要注意这个包要在源代码的目录下打开,仅仅是将这个文件换个地方单独打开是不行的。

后面跟着教程走,输入menuconfig后进入配置页面,

Fh4AtisMX7kVNn2Nb06Km74h1Nes

后在RT-Thread online packages下language packages选中MicroPython,在MicroPython下的Hardware Module中把UART也记得选上

FtCV4uWQoYmJuPdkAcOSg62ZCEku

再后就是依据MicroPython 固件开发指南将系统给配置一下。

最后完成配置,用“scons --target=mkd5”生成工程,当然这儿是MDK5的,若用IAR记得改一下。

打开工程依据MicroPython 固件开发指南修改一下main

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <dfs_fs.h>
#include <rtdevice.h>

/* 文件系统所在分区名称,根据实际情况填写 */
#define FS_PARTITION_NAME     "W25Q128"

int main(void)
{
    /* 挂载 elm 文件系统到 / 目录,如果你所使用的开发板没有文件系统也可以跳过这一步 */
    if (dfs_mount(FS_PARTITION_NAME, "/", "elm", 0, 0) == 0)
    {
        rt_kprintf("Filesystem initialized!");
    }
    else
    {
        /* 如果挂载失败,则尝试在文件系统分区重新创建文件系统 */
        dfs_mkfs("elm", FS_PARTITION_NAME);
        /* 尝试重新挂载文件系统 */
        if (dfs_mount(FS_PARTITION_NAME, "/", "elm", 0, 0) == 0)
        {
            /* 仍然挂载文件系统失败,请自行检查失败原因 */
            rt_kprintf("Failed to initialize filesystem!");
        }
    }

    rt_thread_mdelay(100);

    while(1)
    {
        /* 在这里让程序进入循环,通过这种方式实现 MicroPython 的软复位*/
        extern void mpy_main(const char *filename);
         /* 启动 MicroPython */
        mpy_main(NULL);
    }

    return RT_EOK;  

最后用板载调试器将固件下载就完成了这一步骤。

 

实现功能:

这里就要用到VSCode和其中的插件RT-Thread MicroPython,同样是RT-Thread的。

FuShmgleuXusvUvmWndCoO1lgu1o

同样,有着完整的教程,跟着一步步来就行了。同时它还提供了大量板载例程,虽然没有目标LPC55S69-EVK的,但是不少可以借鉴的,使得本次挺轻松的。

链接板载调试器接口。创建空白工程,点击左下角的插头图标连接设备,当按下板子的RESET按键,终端刷新出下面图标时,就算连接上了,同时也接近成功了。

FuD6BgoD-VxOaWo1bRsw9mCkg7tC

下面就只要随便在终端中打个print就行了,当它回复了就证明了串口通讯的成功。

至于控制IO口,我选择了Blink这一经典方式,毕竟拿到板子的第一件事就是点灯。

import time 
from machine import Pin

led = Pin(("PB15", 37), Pin.OUT_PP)  # create LED object from pin2,Set Pin2 to output

while(True):
    led.value(1)  # Set led turn on
    time.sleep(1) 
    led.value(0)  # Set led turn on
    time.sleep(1) 

将main_example.py改成这个并将之在设备上运行就可以看到板载的RGB灯珠在闪烁着蓝光了。

Fquk5dXo2Nsp4pUs4O4OYxQePb1r

心得体会:

自车赛第一次接触RTT已经大半年了,但是这是第一次用它完成一项作品?虽然Micropython也差不多。两者的结合出乎意料的便捷。至于板子倒是没有太去看,后面有时间要多研究研究,MCUXpresso SDK感觉挺强的这次没怎么用。

我参加Funpack最主要的理由是可以接触更多的而不是在学校的小小实验室之中成天对着STM32与51,这活动可以让我接触到更多的MCU厂家,更多的编程软件与方法。我将有更加广阔的视野。

不觉间到了11期,快结束了,希望后面可以有更多的类似的活动。

 

附件下载
blink.zip
IO控制
团队介绍
WITPT的硬件两人组?
团队成员
Macchiato_404
涵尘者
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号