一、硬件介绍
1、产品特点
MAX78000FTHR 开发板集成卷积神经网络加速器,将ARM Cortex-M4处理器与浮点单元 (FPU)、卷积神经网络 (CNN) 加速器和 RISC-V 内核组合在一起,包括MAX20303 PMIC,用于电池和电源管理,兼容Adafruit Feather Wing外设扩展板。评估板包括各种外设,例如CMOS VGA图像传感器、数字麦克风、低功耗立体声音频CODEC、1MB QSPI SRAM、micro SD存储卡连接器、RGB指示LED和按键。
板载的MAX32625微控制器已预先编程有 DAPLink 固件,可通过 USB 对 MAX78000 Arm 内核进行调试和编程
标准10pin引脚JTAG接口,可调试和编程MAX78000的RISC-V内核
特性
双核:Arm Cortex-M4 FPU处理器,100MHz;RISC-V协处理器,60MHz
512KB闪存
128KB SRAM
16KB 缓存
卷积神经网络加速器
12位并行摄像头接口
MAX20303可穿戴PMIC,带电量计
Micro SD卡连接器
CMOS VGA图像传感器
低功耗、立体声音频编解码器
数字麦克风
硬件框图
系统框图
2、功能引脚示意图 / 原理图
板载按钮
SW1:用户可编程功能按钮;
连接到 P0_2
SW2:用户可编程功能按钮;
连接到 P1_7
SW3:PMIC 电源按钮;
Power_Button:当电路板处于通电状态时,按住此按钮 12 秒将执行硬断电;
当电路板处于断电状态时,按下此按钮可重新打开电路板电源。
该按钮可以被MAX78000读取,当按下按钮时,PMIC_PFN2(P3_0)信号进入逻辑低电平状态。
SW4:连接到 RSTN 的输入;
用于复位 MCU
SW5:DAPLink 固件更新按钮;
用于 DAPLINK 固件的更新; 当按下按钮上电时,将进入固件更新模式;
板载LED
D1: 该LED可由用户控制,连接到对应的GPIO端口;
LED_R:P2_0 LED_G:P2_1 LED_B:P2_2
D2:连接到MAX20303的PMIC_LEDx输出;
这些LED可以通过I2C命令进行控制; 还可以通过 I2C 命令配置为充电状态指示灯;
PMIC_LED1(Red) PMIC_LED2(Green) PMIC_LED0(Blue)
D3:DAPLink(MAX32625)状态指示灯;
由 DAPLink 控制
引脚图
脚序 | 名称 | 功能 |
1 | RST | |
2 | 3V3 | 3.3V 输出为外设提供 3.3V 电压 |
3 | 1V8 | 1.8V 输出为外设提供 1.8V 电压 |
4 | GND | 地 |
5 | P2_3 | GPIO 或 模拟输入(AIN3 通道) |
6 | P2_4 | GPIO 或 模拟输入(AIN4 通道) |
7 | P1_1 | GPIO 或 UART2_Tx |
8 | P1_0 | GPIO 或 UART2_Rx |
9 | MPC1 | GPIO 由 PMIC 通过 I2C 接口控制开漏 或 推挽输出 |
10 | MPC2 | GPIO 由 PMIC 通过 I2C 接口控制开漏 或 推挽输出 |
11 | P0_7 | GPIO 或 QSPI0 时钟SD卡 和 板载 QSPI SRAM 共享 |
12 | P0_5 | GPIO 或 QSPI0 MOSISD卡 和 板载 QSPI SRAM 共享 |
13 | P0_6 | GPIO 或 QSPI0 MISOSD卡 和 板载 QSPI SRAM 共享 |
14 | P2_6 | GPIO 或 LPUART_Rx |
15 | P2_7 | GPIO 或 LPUART_Tx |
16 | GND | 地 |
17 | SYS | 这是主系统电源,可在电池电压 和 USB电源 之间自动切换 (5V) |
18 | PWR | 强制关机按钮对地短路 13 秒,则关闭 PMIC |
19 | VBUS | USB_VBUS当连接到 USB 时,为外设提供 5V 电压在不使用 USB 连接时,也可以用作为电路的供电输入(最好不要,因为没有电路防止电流回流至USB) |
20 | P1_6 | GPIO |
21 | MPC3 | GPIO 由 PMIC 通过 I2C 接口控制开漏 或 推挽输出 |
22 | P0_9 | GPIO 或 QSPI0 SDIO3SD 卡和板载 QSPI SRAM 共享 |
23 | P0_8 | GPIO 或 QSPI0 SDIO2SD卡和板载 QSPI SRAM 共享 |
24 | P0_11 | GPIO 或 QSPI0_Slave |
25 | P0_19 | GPIO |
26 | P3_1 | GPIO 或 Wake-up该引脚为 3.3V |
27 | P0_16 | GPIO 或 I2C1_SCL板载电平转换器允许通过 R15 或 R20 电阻器选择 1.8V 或 3.3V (详见原理图) |
28 | P0_17 | GPIO 或 I2C1_SDA 板载电平转换器允许通过 R15 或 R20 电阻选择 1.8V 或 3.3V (详见原理图) |
二、环境搭建
开发环境主要有【Eclipse】、【Visual Studio Code】等
在此,使用【Visual Studio Code】完成相关的开发;
1、VSCode配置
安装Cortex-Debug插件
用于调试程序
配置文件
使用 CTRL + SHIFT + P打开命令面板,输入“用户设置”;
然后添加以下路径,到 settings.json 文件中,修改后保存;
"MAXIM_PATH": "MaximSDK的路径",
"update.mode": "manual",
"extensions.autoUpdate": false,
2、打开工程项目
1、打开文件夹,SDK下的"GPIO"例程文件夹,进行后续相关代码的编写;
..\MaximSDK\Examples\MAX78000\GPIO
2、将原来默认配置的"EvKit_V1"板卡,改成"FTHR_RevA”,修改后保存;
.vscode/settings.json
三、代码编写
实现效果:板载的RGB_LED灯,实现交替呼吸灯的效果
D1: 该LED可由用户控制,连接到对应的GPIO端口;
LED_R:P2_0
LED_G:P2_1
LED_B:P2_2
main.c
#include <stdio.h> #include <string.h> #include "mxc_device.h" #include "mxc_delay.h" #include "nvic_table.h" #include "pb.h" #include "board.h" #include "gpio.h" #ifdef BOARD_FTHR_REVA #define LED_PORT MXC_GPIO2 #define LED_R MXC_GPIO_PIN_0 #define LED_G MXC_GPIO_PIN_1 #define LED_B MXC_GPIO_PIN_2 #define LED_ON(pins) MXC_GPIO_OutClr(LED_PORT, (pins)) #define LED_OFF(pins) MXC_GPIO_OutSet(LED_PORT, (pins)) #endif // 呼吸灯函数 void pwm_led(uint32_t led_pin) { const int pwm_period = 20000; // 总周期(us) const int step = 200; // 每次变化的步长(us) int duty; // 渐亮 for (duty = 0; duty < pwm_period; duty += step) { MXC_GPIO_OutSet(LED_PORT, led_pin); MXC_Delay(duty); // 亮灯时间us MXC_GPIO_OutClr(LED_PORT, led_pin); MXC_Delay(pwm_period - duty); // 灭灯时间 } // 渐暗 for (duty = pwm_period; duty > 0; duty -= step) { MXC_GPIO_OutSet(LED_PORT, led_pin); MXC_Delay(duty); MXC_GPIO_OutClr(LED_PORT, led_pin); MXC_Delay(pwm_period - duty); } MXC_GPIO_OutSet(LED_PORT, led_pin); // 关闭当前LED } int main(void) { mxc_gpio_cfg_t gpio_out; /* Setup output pin. */ gpio_out.port = LED_PORT; gpio_out.mask = LED_R | LED_G | LED_B; gpio_out.pad = MXC_GPIO_PAD_NONE; gpio_out.func = MXC_GPIO_FUNC_OUT; gpio_out.vssel = MXC_GPIO_VSSEL_VDDIO; gpio_out.drvstr = MXC_GPIO_DRVSTR_0; MXC_GPIO_Config(&gpio_out); while (1) { pwm_led(LED_R); MXC_Delay(MXC_DELAY_MSEC(20)); pwm_led(LED_G); MXC_Delay(MXC_DELAY_MSEC(20)); pwm_led(LED_B); MXC_Delay(MXC_DELAY_MSEC(20)); } }
编译代码
使用CTRL + SHIFT + B 选择 Build 编译项目;
或使用终端 make -j16 PROJECT=GPIO,编译成 .elf 程序二进制文件;
四、程序烧录
1、用数据线连接开发板至电脑上;
2、程序烧录
使用CTRL + SHIFT + B 选择 flash & run 烧录并运行程序;
或在终端中运行
arm-none-eabi-gdb --cd="D:\MaximSDK\Examples\MAX78000\GPIO" ^ --se="build\max78000.elf" --symbols=build\GPIO.elf ^ -x=".vscode\flash.gdb" ^ --ex="flash_m4_run D:/MaximSDK/Tools/OpenOCD cmsis-dap.cfg max78000.cfg" ^ --batch
五、程序调试
选择GDB(Arm M4),并按 F5 启动调试器;
调试控制台会输出相关信息;
六、演示效果