Funpack3-4 任务一 USB 多协议HUB
该项目使用了MCXN947,实现了USB多协议HUB的设计,它的主要功能为:使用CAN口和UART口向MCU发送信息,通过USB显示出数据;从USB端可以指定向CAN和UART发送数据,并从对应端口发送出去。。
标签
Funpack活动
MPU
USB
MCXN947
arilink
更新2024-09-09
60

项目介绍

本项目使用NXP MCXN947作为主控,选择的任务是USB多协议HUB

项目详情

USB多协议HUB本质上就是把MCXN947作为“网关”,上游作为USB Device连接到电脑的USB接口上,下游通过UART或者CAN总线连接到其他设备,这样便于多个设备的统一管理和控制,我们日常生活中见到的USB CAN盒子和多路串口盒子都是这种形式,本任务的“多协议”HUB在此基础上进一步延伸,目的是实现CAN和UART两种不同通讯接口的支持。

设计思路

1. MCXN947有1个USB HS和1个USB FS,均支持主机和设备两种模式,开发板上使用的是HS,本项目就使用此接口连接电脑进行通讯。

2. 开发板与主机进行USB通讯的实现方法有很多,HID/CDC/自定义都可以满足项目需求,本项目使用2个CDC来构成一个USB Composite设备,其中一个CDC用作UART数据收发,另外一个用于CAN数据收发,两者互不干扰,以实现高效率传输。

3. 项目使用主流的FreeRTOS操作系统,分别给USB通讯 UART通讯 CAN通讯创建了独立的Task,以便于调试开发和后续维护

4. UART和CAN通讯使用中断传输,收到外设中断后,在中断回调函数里使用FreeRTOS里的Task-notifications机制通知Task解除阻塞状态,该机制可以比信号量,消息队列等方式的速度快45%,使用的RAM也更少。该机制的详细介绍参考此链接:https://freertos.org/zh-cn-cmn-s/Documentation/02-Kernel/02-Kernel-features/03-Direct-to-task-notifications/01-Task-notifications

5. 由于使用开发板使用的是USB CDC Composite模式,因此PC端可以不用再开发上位机,使用普通的串口助手即可。

硬件介绍

芯片介绍

  1. 1. Arm®Cortex®-M33@150MHz(双核)
  2. 2. 高达2MB的片上闪存(2个1MB Bank)
  3. 3. 4个16位ADC(单端)或2个16位(差分)
  4. 4. 3个功率放大器
  5. 5. 丰富的定时器
  6. 6. USB高速接口+HS PHY
  7. 7. USB全速接口(主机/设备),带片上FS PHY
  8. 8. 10个LP Flexcomm,每个都支持SPI、I2C、UART
  9. 9. 1个具有QoS的以太网接口
  10. 10. 电机控制子系统

开发板介绍

IMG-Funpack3-4-20240816143337.png

开发板的主要特征如下:

  1. 1. 板载MCU-Link (支持调试和串口 非常方便)
  2. 2. 以太网接口
  3. 3. USB HS接口
  4. 4. CAN收发器和CAN接口
  5. 5. FlexIO 摄像头接口
  6. 6. 按键 LED

PCB LayOut

采用4层板布局,非常规整,标识清晰,大厂作风

IMG-Funpack3-4-20240816143928.pngIMG-Funpack3-4-20240816144208.png

需要注意的是 P1_10和P1_11的IO口有功能复用,如果用作CAN通讯,则需要把板子背面的SJ16和SJ26跳线正确短接,否则无法进行CAN通讯(原理图上描述的是默认复用到CAN通讯 我收到的板子只短接了一个)

设备连接

IMG-Funpack3-4-20240816145335.png

acbc343dbc39207f05f511ff2ebacbf.jpg

开发过程

程序流程

IMG-Funpack3-4-20240816151435.png

如上图所示,本项目使用FreeRTOS管理多个任务,其中Uart Task负责串口数据收发,Can Task负责Can数据收发 USB Task负责与PC双向通讯 并于上述其他两个Task进行数据交互 各个模块的具体开发过程中及注意事项如下:

工程配置

  1. 创建can_transfer.c/.h uart_transfer.c/.h4个文件,并在Project/armgcc/CMakeList.txt里添加这4个文件 IMG-Funpack3-4-20240819200632.png
  2. Project/gcc/config.cmake添加uart can相关的驱动模块 IMG-Funpack3-4-20240819200901.png
  3. Pin Mux添加Can和Uart相关的Pin Mux配置

UART模块开发

  1. Uart模块是在串口中断Demo的基础上进行开发,新增3个接口供其他模块调用 串口的配置过程不过多赘述 IMG-Funpack3-4-20240819200944.png
  2. 串口中断里通过Notify的方式通知Task读取串口数据 IMG-Funpack3-4-20240819201041.png
  3. Uart Task里获取串口收到的消息 并通过全局变量通知USB 模块发送给上游 IMG-Funpack3-4-20240819201108.png
  4. USB收到PC发给串口的数据后,通过uart_tx_send接口发送到串口 IMG-Funpack3-4-20240819201131.png

注意事项

  1. 需要在初始化的时候配置串口的中断优先级 否则在串口中断回调里无法完成释放信号量等的操作
  2. 需要在各个模块都初始化完成之后再按需要创建Task,避免出现其他问题

CAN模块开发

  1. CAN模块是在CAN中断Demo的基础上进行开发,CAN的配置过程不做过多赘述,新增3个接口供其他模块调用 IMG-Funpack3-4-20240819201209.png
  2. CAN中断里通过Notify的方式通知CAN Task处理收到的数据 IMG-Funpack3-4-20240819201253.png
  3. Can Task收集数据,并通过全局变量通知USB 模块发送数据给上游 IMG-Funpack3-4-20240819201346.png
  4. USB收到PC发给CAN的数据后 通过can_tx_send接口发送can 数据 IMG-Funpack3-4-20240819201444.png

注意事项

  1. 需要确保CAN的跳线正确连接
  2. 与串口模块类似,需要在初始化的时候配置中断优先级

USB模块开发

  1. USB模块是在CDC Freertos demo的基础上进行开发,usb配置本文不做过多赘述,其中compose.c作为整个项目的框架文件,virtual_com.c作为usb通讯的处理模块
  2. 本项目使用2个cdc设备 当前是把instance 0作为can instance 1作为串口与PC上位机通讯 主要逻辑当USB 收到来自PC下发的数据 就把数据拷贝到对应的外设buffer里去,并发送出去 当收到来自外设task的信号之后,把外设收到的数据通过USB 对应的instance 发送给PC 完成通讯
  3. PC下发CAN数据的处理流程 IMG-Funpack3-4-20240819201729.png
  4. CAN数据上传到USB的流程 IMG-Funpack3-4-20240819201935.png

注意事项

处理完USB收到的数据之后 如果没有实际要回复的数据,则需要手动回复一组为0的数据,否则USB接收不到下一次消息 IMG-Funpack3-4-20240819202259.png

系统联调

  1. 设置时钟和中断优先级 IMG-Funpack3-4-20240819205302.png
  2. 模块和task启动 IMG-Funpack3-4-20240819205427.png

功能展示

  1. 设备管理器出现2个CDC设备 并且从USB 分析软件里可以看出USB设备的详细信息 其中COM3是USB转串口 用于做串口通讯实验 COM7 COM8是MCXN产生的2个CDC设备 IMG-Funpack3-4-20240819211520.png
  2. CAN盒子使用广成科技的USBCAN-II Pro IMG-Funpack3-4-20240819211722.png
  3. 系统启动 IMG-Funpack3-4-20240819232707.png
  4. USB 2 CAN USB 2 UART CAN 2 USB UART 2 USB 均正常通讯 IMG-Funpack3-4-20240819232841.png

心得体会

  1. MCXN947硬件非常强大,目前也只用了一个核心,双核工作需要进一步探索
  2. 开发过程中需要细心,CAN开始无法通讯,还是查看PCB才发现跳线没接正确
  3. MCUX VSCode的开发非常舒服,点赞!
  4. Funpack的活动非常赞,能接触到各个厂商的芯片,对于能力提升很有帮助 这是我参加的第二期 后续会多多参加
附件下载
funpack3-4_arilink_20240820.rar
代码(已删除SDK源码 否则文件过大无法上传)
团队介绍
self
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号