首页 > 其他分享 >N32移植cherry usb

N32移植cherry usb

时间:2024-06-18 14:43:44浏览次数:12  
标签:USBHOST USB cherry MAX N32 define CONFIG USBDEV usb

目前的项目用到了USB,N32自带的USB库比较难用。考虑用开源的USB库。例如tiny usb(比较全) 和 cherry usb(比较好移植,有地方问)。本文以cherry usb为例子进行讲述,tiny usb放另外一篇文章中去讲。

  • N32和STM32F103的USB IP用的是一致的都是fsdev这个IP,所以N32的移植可以完全参考STM32去搞。
    1、准备好一个能够使用 printf 、 malloc、 free 的工程,特别是这个printf 打印,我踩过坑了,不去实现它的话,会出现枚举后,立刻失败的现象。
    2、将

    这些文件添加到编译中去。
    3、添加USB config.h文件,可以照抄f103的。
/*
 * Copyright (c) 2022, sakumisu
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#ifndef CHERRYUSB_CONFIG_H
#define CHERRYUSB_CONFIG_H

#define CHERRYUSB_VERSION     0x010000
#define CHERRYUSB_VERSION_STR "v1.0.0"

/* ================ USB common Configuration ================ */

#define CONFIG_USB_PRINTF(...) printf(__VA_ARGS__)

#define usb_malloc(size) malloc(size)
#define usb_free(ptr)    free(ptr)

#ifndef CONFIG_USB_DBG_LEVEL
#define CONFIG_USB_DBG_LEVEL USB_DBG_INFO
#endif

/* Enable print with color */
#define CONFIG_USB_PRINTF_COLOR_ENABLE

/* data align size when use dma */
#ifndef CONFIG_USB_ALIGN_SIZE
#define CONFIG_USB_ALIGN_SIZE 4
#endif

/* attribute data into no cache ram */
#define USB_NOCACHE_RAM_SECTION __attribute__((section(".noncacheable")))

/* ================= USB Device Stack Configuration ================ */

/* Ep0 max transfer buffer, specially for receiving data from ep0 out */
#define CONFIG_USBDEV_REQUEST_BUFFER_LEN 256

/* Setup packet log for debug */
// #define CONFIG_USBDEV_SETUP_LOG_PRINT

/* Check if the input descriptor is correct */
// #define CONFIG_USBDEV_DESC_CHECK

/* Enable test mode */
// #define CONFIG_USBDEV_TEST_MODE

#ifndef CONFIG_USBDEV_MSC_MAX_LUN
#define CONFIG_USBDEV_MSC_MAX_LUN 1
#endif

#ifndef CONFIG_USBDEV_MSC_MAX_BUFSIZE
#define CONFIG_USBDEV_MSC_MAX_BUFSIZE 512
#endif

#ifndef CONFIG_USBDEV_MSC_MANUFACTURER_STRING
#define CONFIG_USBDEV_MSC_MANUFACTURER_STRING ""
#endif

#ifndef CONFIG_USBDEV_MSC_PRODUCT_STRING
#define CONFIG_USBDEV_MSC_PRODUCT_STRING ""
#endif

#ifndef CONFIG_USBDEV_MSC_VERSION_STRING
#define CONFIG_USBDEV_MSC_VERSION_STRING "0.01"
#endif

// #define CONFIG_USBDEV_MSC_THREAD

#ifndef CONFIG_USBDEV_MSC_PRIO
#define CONFIG_USBDEV_MSC_PRIO 4
#endif

#ifndef CONFIG_USBDEV_MSC_STACKSIZE
#define CONFIG_USBDEV_MSC_STACKSIZE 2048
#endif

#ifndef CONFIG_USBDEV_RNDIS_RESP_BUFFER_SIZE
#define CONFIG_USBDEV_RNDIS_RESP_BUFFER_SIZE 156
#endif

#ifndef CONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE
#define CONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE 1536
#endif

#ifndef CONFIG_USBDEV_RNDIS_VENDOR_ID
#define CONFIG_USBDEV_RNDIS_VENDOR_ID 0x0000ffff
#endif

#ifndef CONFIG_USBDEV_RNDIS_VENDOR_DESC
#define CONFIG_USBDEV_RNDIS_VENDOR_DESC "CherryUSB"
#endif

#define CONFIG_USBDEV_RNDIS_USING_LWIP

/* ================ USB HOST Stack Configuration ================== */

#define CONFIG_USBHOST_MAX_RHPORTS          1
#define CONFIG_USBHOST_MAX_EXTHUBS          1
#define CONFIG_USBHOST_MAX_EHPORTS          4
#define CONFIG_USBHOST_MAX_INTERFACES       8
#define CONFIG_USBHOST_MAX_INTF_ALTSETTINGS 8
#define CONFIG_USBHOST_MAX_ENDPOINTS        4

#define CONFIG_USBHOST_MAX_CDC_ACM_CLASS 4
#define CONFIG_USBHOST_MAX_HID_CLASS     4
#define CONFIG_USBHOST_MAX_MSC_CLASS     2
#define CONFIG_USBHOST_MAX_AUDIO_CLASS   1
#define CONFIG_USBHOST_MAX_VIDEO_CLASS   1

#define CONFIG_USBHOST_DEV_NAMELEN 16

#ifndef CONFIG_USBHOST_PSC_PRIO
#define CONFIG_USBHOST_PSC_PRIO 0
#endif
#ifndef CONFIG_USBHOST_PSC_STACKSIZE
#define CONFIG_USBHOST_PSC_STACKSIZE 2048
#endif

//#define CONFIG_USBHOST_GET_STRING_DESC

// #define CONFIG_USBHOST_MSOS_ENABLE
#define CONFIG_USBHOST_MSOS_VENDOR_CODE 0x00

/* Ep0 max transfer buffer */
#define CONFIG_USBHOST_REQUEST_BUFFER_LEN 512

#ifndef CONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT
#define CONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT 500
#endif

#ifndef CONFIG_USBHOST_MSC_TIMEOUT
#define CONFIG_USBHOST_MSC_TIMEOUT 5000
#endif

/* ================ USB Device Port Configuration ================*/
#define CONFIG_USBDEV_MAX_BUS 1

#define CONFIG_USBDEV_EP_NUM 8
#define CONFIG_USBDEV_FSDEV_PMA_ACCESS 2

/* ================ USB Host Port Configuration ==================*/

#define CONFIG_USBHOST_PIPE_NUM 10


/* ================ EHCI Configuration ================ */

#define CONFIG_USB_EHCI_HCCR_BASE       (0x20072000)
#define CONFIG_USB_EHCI_HCOR_BASE       (0x20072000 + 0x10)
#define CONFIG_USB_EHCI_FRAME_LIST_SIZE 1024
// #define CONFIG_USB_EHCI_INFO_ENABLE
// #define CONFIG_USB_EHCI_HCOR_RESERVED_DISABLE
// #define CONFIG_USB_EHCI_CONFIGFLAG
// #define CONFIG_USB_EHCI_PORT_POWER

#endif

4、完善初始化配置文件。
使能中断、配置USB的48M的时钟

void usb_dc_low_level_init(void)
{
	    /* USB interrupt Init */
		USB_Interrupts_Config();
    /* Peripheral clock enable */
		 RCC_ConfigUsbClk(RCC_USBCLK_SRC_PLLCLK_DIV1);//1分频率 usb
		RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_USB, ENABLE);

}

5、添加USB的中断

void USB_LP_IRQHandler(void)
{
      extern void USBD_IRQHandler(uint8_t busid);
    USBD_IRQHandler(0);
}



/**
 * @brief  This function handles USB WakeUp interrupt request.
 */
void USBWakeUp_IRQHandler(void)
{
   EXTI_ClrITPendBit(EXTI_LINE17);
}

完成以上步骤就可以成功枚举了。

标签:USBHOST,USB,cherry,MAX,N32,define,CONFIG,USBDEV,usb
From: https://www.cnblogs.com/shydragon/p/18254336

相关文章

  • 创建国民芯片N32G430工程模板教程
    一、文章内容说明对于大部分初学者来说,都习惯性跟着UP主去按部就班创建工程模板然后在进行相关程序模块的编写。但是实际工作中这是一种很费时间也不明智的做法,尽管如此本文还是想要满足一下大部分初学者的心态,确保他们在按部就班的过程中有所依赖,本文就以傻瓜式的方法来说明......
  • C# 通过Win32API设置客户端系统时间
    在日常工作中,有时可能会需要获取或修改客户端电脑的系统时间,比如软件设置了Licence有效期,预计2024-06-0100:00:00到期,如果客户手动修改了客户端电脑时间,往前调整了一年,则软件就可以继续使用一年,如此循环往复,则Licence将形同虚设。所以有时候需要校验客户端电脑时间和服务器端时间......
  • Windows11系统Win32_EncryptableVolume.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个Win32_EncryptableVolume.dll文件(挑选合适......
  • usb gadget配置记录
    linux配置DeviceDrivers>Networkdevicesupport>USBNetworkAdapters[*]Multi-purposeUSBNetworkingFramework[*]SimpleUSBNetworkLinks(CDCEthernetsubset)DeviceDrivers>USBsupport>USBGadgetSupport[*]Ser......
  • Linux下基于USB的WiFi(RTL8723DU):驱动、wpa_supplicant配置、hostapd配置等
    1WiFi基本概念WLAN(WirelessLAN)是无线局域网的意思。IEEE802.11是现今无线局域网通用的标准。关于802.11协议介绍参考《80211协议介绍》。信道也就是频段,是以无线信号作为传输载体的数据信号传送通道。802.11工作组划分了4个独立的频段:2.4GHz、3.6GHz、4.9GHz和5.8......
  • 上位机图像处理和嵌入式模块部署(h750 mcu和usb虚拟串口)
    【 声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:[email protected]】    对于mcuusb而言,大部分情况下,它和上位机之间的关系都是device的关系。一般usb,可以成成host和device。如果mcu是host,那么意味着它可以主动访问别的usb设备,比如u盘、相机之类的设备。如......
  • N32G45XVL-STB之移植LVGL(8.4.0)
    目录概述1系统软硬件1.1软件版本信息1.2 ST7796-LCD1.3 MCUIO与LCDPIN对应关系2认识LVGL2.1 LVGL官网2.2下载V8.4.03移植LVGL3.1硬件驱动实现3.2添加LVGL库文件3.3移植和硬件相关的代码3.3.1驱动接口相关文件介绍3.3.2重新接口函数3.4配置.h文......
  • 蓝牙BLE上位机工具开发理论线索梳理_1.Win32设备(Windows 属性系统)
    1.Windows属性系统     Windows属性系统是一个可扩展的数据定义读/写系统,它提供一种统一的方式来表达有关Shell项的元数据。WindowsVista及更高版本中的Windows属性系统使你能够存储和检索Shell项的元数据。Shell项是任何单个内容,例如文件、文件夹、电......
  • HbuilderX,找不到rollup/rollup-win32-x64-msvc
    在使用HbuilderX,使用vue3开发uniapp时,我运行app,报错,rollup组件找不到了。这个rollup是一个编译js的工具,win32-x64的意思是采用windows版本64位的运行版本,msvc是说,需要windows平台下的msvc,它是一种c++编译器的类型,比如QT,就有使用另一种MinGW编译器。总的来说,rollup这个组件,是在64......
  • USB端口管控软件|USB端口控制软件有哪些(小技巧)
    ​USB端口管控软件成为了保障企业数据安全的重要手段。 本文将为您介绍几款知名的USB端口控制软件,并分享一些实用的小技巧,帮助您更好地管理US端口,确保企业信息安全。#usb接口#一、USB端口控制软件推荐1,域智盾域智盾是一款功能强大的企业USB端口控制软件。它采用先进......