加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

LPC55S69移植CherryUSB协议栈测试(工程源代码)

05/20 17:17
1194
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
电路板图(3)
相关方案
  • 方案介绍
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

看到帖子《移植CherryUSB 到LPC55S69》 https://www.nxpic.org.cn/module/forum/thread-629656-1-1.html

测试了一下LPC55S69基于CherryUSB协议栈的例子,发现移植不完善。例子只实现了USB鼠标的应用,没有实现输出端点控制。本次就加以补充完善了输入输出端点发送接收数据。测试了HID类,MSC类和CDC类,基本正常工作。其他的例子还没测试。

先放上例子工程。下面是工程:

lpc55s69_CherryUsb.rar (6.99 MB)

移植的主要文件在usb_dc_lpc3511.c中。

这里要注意先初始化USB的VBUS功能引脚。我在pin_mux.c中初始化的。

    const uint32_t port0_pin22_config = (/* Pin is configured as USB0_VBUS */
                                         0x07 |
                                         /* No addition pin function */
                                         IOCON_PIO_MODE_INACT |
                                         /* Standard mode, output slew rate control is enabled */
                                         IOCON_PIO_SLEW_STANDARD |
                                         /* Input function is not inverted */
                                         IOCON_PIO_INV_DI |
                                         /* Enables digital function */
                                         IOCON_PIO_DIGITAL_EN |
                                         /* Open drain is disabled */
                                         IOCON_PIO_OPENDRAIN_DI);
    /* PORT0 PIN22 (coords: 78) is configured as USB0_VBUS */
    IOCON_PinMuxSet(IOCON, 0U, 22U, port0_pin22_config);

工程界面如下

main.c中使用了3个宏定义测试了3个例子。

#ifdef  HID_MOUSE_TEST
extern void hid_mouse_init(void);
extern void hid_mouse_test(void);
#endif


#ifdef  MSC_RAM_TEST
extern void msc_ram_init(void);
#endif

#ifdef  CDC_ACM_HID_MSC_TEST
extern void cdc_acm_hid_msc_descriptor_init(void);
extern void cdc_acm_data_send_with_dtr_test(void);
extern void hid_mouse_test(void);
#endif

extern void video_init();
extern void video_test();


/*!
 * @brief Main function
 */
int main(void)
{
    char ch;

    /* Init board hardware. */
    /* set BOD VBAT level to 1.65V */
    POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv, kPOWER_BodHystLevel50mv, false);
    /* attach main clock divide to FLEXCOMM0 (debug console) */
    CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

    BOARD_InitBootPins();
    BOARD_InitBootClocks();
    BOARD_InitBootPeripherals();
    BOARD_InitDebugConsole();
    POWER_DisablePD(kPDRUNCFG_PD_USB0_PHY); /*< Turn on USB0 Phy */
    
    FT9341_Init(DEMO_SPI_LCD_WriteCmd,DEMO_SPI_LCD_WriteData);
    PRINTF("hello world.rn");
    DEMO_FlushDisplay(0,0,200,190,(uint16_t *)c_bmpClockFace);
    
#ifdef  HID_MOUSE_TEST
    hid_mouse_init();
#endif

#ifdef  MSC_RAM_TEST
    msc_ram_init();
#endif

#ifdef  CDC_ACM_HID_MSC_TEST
    cdc_acm_hid_msc_descriptor_init();
#endif
    
    while (1)
    {
//        ch = GETCHAR();
//        PUTCHAR(ch);
        
#ifdef  HID_MOUSE_TEST
        hid_mouse_test();
#endif

#ifdef  CDC_ACM_HID_MSC_TEST
        cdc_acm_data_send_with_dtr_test();
        hid_mouse_test();
#endif
        
    }
}

在如下位置定义宏定义开关选择测试例子。

定义HID_MOUSE_TEST是使用hid_mouse_template.c例子,实现的是一个鼠标指针动作。

定义MSC_RAM_TEST是使用msc_ram_template.c例子,实现的是一个u盘。

上电插上USB后会识别出U盘来,并且弹出需要格式化。格式化之后就可以看到容量了,可以读写数据了。

不过这只是用RAM模拟的存储区,断电会消失。

可以看到识别的设备了。

下一步就是格式化U盘。

格式化后可以新建文件了。

定义CDC_ACM_HID_MSC_TEST是使用cdc_acm_hid_msc_template.c例子,实现的是一个复合设备,包含HID,MSC,CDC 3个类。

其中HID我简单改了下,改成了USB的手柄控制器

编译下载之后,会出现3个设备。其中串口CDC没有装上驱动,有感叹号。等下装个驱动测试。MSC会要求格式化。

下面就是游戏控制器手柄

下面为串口CDC装个驱动,这个会提示驱动不匹配之类的,不管他,先确定继续。

装好驱动之后就出来串口了。感叹号也消失了。

下面看看串口数据。打开串口6。

测试连续发送数据2048字节。

void cdc_acm_data_send_with_dtr_test(void)
{
    if(usb_device_is_configured() == 0)   return ;
    if (dtr_enable) {
        memset(&write_buffer[10], 'a', 2038);
        ep_tx_busy_flag = true;
        usbd_ep_start_write(CDC_IN_EP, write_buffer, 2048);
        while (ep_tx_busy_flag) {
        }
    }
}

  • lpc55s69_CherryUsb.rar

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
74HC245D 1 Nexperia Bus Transceiver

ECAD模型

下载ECAD模型
$1.25 查看
HFBR-57E0APZ 1 Foxconn Transceiver, 1270nm Min, 1380nm Max, LC Connector, Surface Mount
$668.56 查看
CSTCC10M0G53-R0 1 Murata Manufacturing Co Ltd Ceramic Resonator, 10MHz Nom, CERAMIC PACKAGE-3
$0.96 查看

相关推荐

电子产业图谱