当前位置:   article > 正文

【带NPU和DSP的聆思科技MCU来了】_hifi4 dsp

hifi4 dsp

 最近拿到一块聆思科技的CSK-6-NanoKit开发板,据说可广泛应用于家居家电、智能车载、智能教育、智能办公、智能安防、工业智能化和消费电子等领域。

乍一看,好像是一块普通的MCU。

 再认真看一下配置……

跟普通的MCU不太一样,带NPU和DSP的

采用安谋科技“星辰”STAR-MC1 + HIFI4 双核架构,主频最高支持300MHz。

集成为神经网络操作设计的NPU,深度适配科大讯飞AI算法,算力达128GOPS。

不过让人意外的是,这款开发板默认支持的操作系统不是久负盛名的FreeRTOS,也不是国货之光RT-Thread和OpenHarmony,而是Zephyr RTOS。

 

Zephyr RTOS是一款由Linux基金会主导的、针对资源受限设备进行优化过的开源RTOS,为高性能、低功耗的物联网应用而设计。因为其先进的特性,很多芯片厂商也将Zephyr RTOS作为其优先适配的操作系统。

聆思科技CSK6 沿用了 Zephyr 的设计, 采用 SDK 与 项目工程 分离的形式,通过构建系统,将项目工程的代码与 SDK 进行关联编译。

这意味着 SDK 与 项目源码 是可以存放在不同的路径下的。

这样做有两个好处,一方面是可以最大的保证项目源码的简洁,另一方面 SDK 也可以进行小版本的快速升级,而应用程序不会受其影响。

 

嵌入式系统工具和SDK的部署

聆思科技在这里贴心的为大家准备了Windows、MacOS、Ubuntu三款流行操作系统的安装工具。

Windows用户(下载后安装):
https://castor.iflyos.cn/castor/v3/lisaPluginZephyr/download?platform=windows

MacOS和Ubuntu用户(命令行执行):

curl -o- https://cdn.iflyos.cn/public/cskTools/lisa-zephyr-install.sh | bash

有了这个工具,大家就可以在命令行下安装相关SDK和开发环境了。

相关命令:
lisa zep install

 

检查一下环境是否安装成功。

这里主要是安装Git和一些核心插件,如果的机器上已经满满当当,可以放心下一步。

 

拉取CSK6对应的SDK之后,就可以正式开始测试了。

 

此次重点测评的四个特性

A、Hello World(实时输出)
B、点亮LED(GPIO控制)
C、Wi-Fi连接
D、MicroPython交互

一、Hello Word

这个开发板上有个实时复位的按键,我们这里来完成一个每次按键就能输出一行字符的功能。

执行命令:lisa zep create,然后选择其中的“hello_world”。

 它会自动生成一个项目,我们进入该项目文件夹,可以看到源码目录和其它的一些配置文件。

 进入src目录,修改main.c文件为我们所要的效果。

 再执行编译命令:
lisa zep build -b csk6002_9s_nano

 如果编译没有出错,接下来就可以烧录进开发板了。

由于NanoKit开发板集成了DAPLINK烧录器,因此支持使用pyocd进行代码烧录。

连接好开发板的USB线,执行以下命令:
lisa zep flash

 烧录完成后,运行Putty,选择连接开发板后生成的串口,波特率设置为115200。

我这里已经可以看到结果了。

 二、GPIO点灯

大部分外设的调试,都是从点灯开始的。

这也几乎是嵌入式工作的一项基本操作,重点就是考察开发板的“通用输入输出”功能。

还是执行命令:
lisa zep create

然后选择basic目录里的blinky,系统会自动创建blinky这个项目文件夹。

 在prj.conf文件中添加项目基础组件配置:
CONFIG_GPIO=y

然后再编辑src目录里的main.c文件。

我这里的示例代码是:

  1. #include <zephyr.h>
  2. #include <device.h>
  3. #include <devicetree.h>
  4. #include <drivers/gpio.h>
  5. /* 1000 msec = 1 sec */
  6. #define SLEEP_TIME_MS 1000
  7. /* The devicetree node identifier for the "led0" alias. */
  8. #define LED0_NODE DT_ALIAS(led0)
  9. #if DT_NODE_HAS_STATUS(LED0_NODE, okay)
  10. #define LED0 DT_GPIO_LABEL(LED0_NODE, gpios)
  11. #define PIN DT_GPIO_PIN(LED0_NODE, gpios)
  12. #define FLAGS DT_GPIO_FLAGS(LED0_NODE, gpios)
  13. #else
  14. /* A build error here means your board isn't set up to blink an LED. */
  15. #error "Unsupported board: led0 devicetree alias is not defined"
  16. #define LED0 ""
  17. #define PIN 0
  18. #define FLAGS 0
  19. #endif
  20. void main(void)
  21. {
  22. const struct device *dev;
  23. bool led_is_on = true;
  24. int ret;
  25. dev = device_get_binding(LED0);
  26. if (dev == NULL) {
  27. return;
  28. }
  29. ret = gpio_pin_configure(dev, PIN, GPIO_OUTPUT_ACTIVE | FLAGS);
  30. if (ret < 0) {
  31. return;
  32. }
  33. while (1) {
  34. gpio_pin_set(dev, PIN, (int)led_is_on);
  35. led_is_on = !led_is_on;
  36. k_msleep(SLEEP_TIME_MS);
  37. }
  38. }

继续编译固件:
lisa zep build -b csk6002_9s_nano

确保通过USB连接PC,烧录固件。
lisa zep flash --runner pyocd

一切顺利的话,应该能看到开发板上的绿色LED每隔一秒亮1次了。

 

三、Wi-Fi连接

作为一款多功能开发板,Wi-Fi是最基本的。

这里实现一个连接Wi-Fi热点,并打印相关信息到串口的操作。

我先设置一个Wi-Fi热点。
SSID:Meegoo
密码:abcd1234

然后继续创建项目:
lisa zep create

 依次选择boards → csk6 → network → wifi_sta。

我这里是把SSID和密码写进Kconfig文件的。

 相关main.c代码内容:

  1. /*
  2. * SPDX-License-Identifier: Apache-2.0
  3. */
  4. #include <stdlib.h>
  5. #include <sys/printk.h>
  6. #include <sys/sys_heap.h>
  7. #include <net/net_if.h>
  8. #include <net/net_core.h>
  9. #include <net/net_context.h>
  10. #include <net/net_mgmt.h>
  11. #include "csk6/csk_wifi.h"
  12. static csk_wifi_event_cb_t wifi_event_cb;
  13. static struct net_mgmt_event_callback dhcp_cb;
  14. static void handler_cb(struct net_mgmt_event_callback *cb, uint32_t mgmt_event, struct net_if *iface)
  15. {
  16. if (mgmt_event != NET_EVENT_IPV4_DHCP_BOUND) {
  17. return;
  18. }
  19. char buf[NET_IPV4_ADDR_LEN];
  20. printk("Your address: %s\n", net_addr_ntop(AF_INET, &iface->config.dhcpv4.requested_ip, buf, sizeof(buf)));
  21. printk("Lease time: %u seconds\n", iface->config.dhcpv4.lease_time);
  22. printk("Subnet: %s\n", net_addr_ntop(AF_INET, &iface->config.ip.ipv4->netmask, buf, sizeof(buf)));
  23. printk("Router: %s\n", net_addr_ntop(AF_INET, &iface->config.ip.ipv4->gw, buf, sizeof(buf)));
  24. }
  25. static void wifi_event_handler(csk_wifi_event_t events, void *event_data, uint32_t data_len, void *arg)
  26. {
  27. if (events & CSK_WIFI_EVT_STA_CONNECTED) {
  28. printk("[WiFi sta] connected\n");
  29. } else if (events & CSK_WIFI_EVT_STA_DISCONNECTED) {
  30. printk("[WiFi sta] disconnected\n");
  31. } else {
  32. abort();
  33. }
  34. }
  35. void main(void)
  36. {
  37. csk_wifi_init();
  38. wifi_event_cb.handler = &wifi_event_handler;
  39. wifi_event_cb.events = CSK_WIFI_EVT_STA_CONNECTED | CSK_WIFI_EVT_STA_DISCONNECTED;
  40. wifi_event_cb.arg = NULL;
  41. csk_wifi_add_callback(&wifi_event_cb);
  42. csk_wifi_sta_config_t sta_config = {
  43. .ssid = CONFIG_EXAMPLE_WIFI_SSID,
  44. .pwd = CONFIG_EXAMPLE_WIFI_PASSWORD,
  45. .encryption_mode = CSK_WIFI_AUTH_WPA2_PSK
  46. };

继续生成镜像并烧录,然后重置(按复位按钮),查看结果。

 可以看到,已经成功连接Wi-Fi热点,并获取IP地址了。

接下来,数据传输什么的功能,可以自己添加了。

四、MicroPython交互

前面三个功能都是经典C语言实现的,
其实聆思科技还有一个重头戏 —— 适配MicroPython。

这是Python 在微处理器上运行一个轻量化的版本,可以帮助产品设计者快速实现原型。

聆思科技在搭建 MicroPython 应用开发环境的同时,完完全全的保留了 Zephyr 原生应用开发的环境,使得你既可以快速的从原生应用上加入对 MicroPython 的支持,也可以在 MicroPython 应用项目内增加原生代码(如 C 语言)的业务实现。

执行命令:
lisa install @lisa-plugin/micropython -g

这个包有点大,要耐心等一会儿。成功装完之后是这样的。

 我这里主要使用的lisa版本和MicroPython版本分别是:
listenai/lisa - 2.4.2
micropython - 0.1.3

安装好插件后,继续拉取 MicroPython SDK 相关源码。这些源码将会在编译 MicroPython 应用时被引用。
lisa mpy use-sdk

友情提示:
1、我这里常规Windows命令行状态有报“process.title cannot be used as a valid name”的错误,但在Powershell状态下可以顺利运行。

2、如果你希望在新建MicroPython项目时,pip某个库文件。可以用:“lisa mpy pip:install 库名”的方式。

 然后继续编译,烧录……

注:这个过程很慢,你可以先去泡杯咖啡再回来。

如果没有报错的话,你应该可以通过串口进行相关Python操作了(我这里是COM6)。

 小结:

首先,聆思科技对Zephyr RTOS确实做到了高度适配。

为了方便开发者,提供了大量的工具包和示例。

即使Zephyr RTOS在国内算“小众”嵌入式系统,他们的工具和文档也可以让新手快速进入开发状态。

比如这个名为“Lisa”的核心配置工具,确实是一款非常省事的利器。

 不过由于开发板刚推出没多久,他们的各种线上资源也在不停的升级,所以各位尝鲜的朋友或多或少会遇到一些坑。等他们发布正式版之后应该会好很多。

当然,我这里只是抛砖引玉,用到了CSK-6-NanoKit的一些基础功能。

实际这个板子还有大量潜力可以挖掘,音频处理、人工智能识别……都可以整起来。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/219162
推荐阅读
相关标签
  

闽ICP备14008679号