加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

LPC55S69移植CherryUSB協(xié)議棧測試(工程源代碼)

05/20 17:17
4465
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
電路板圖(3)
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

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

測試了一下LPC55S69基于CherryUSB協(xié)議棧的例子,發(fā)現(xiàn)移植不完善。例子只實(shí)現(xiàn)了USB鼠標(biāo)的應(yīng)用,沒有實(shí)現(xiàn)輸出端點(diǎn)控制。本次就加以補(bǔ)充完善了輸入輸出端點(diǎn)發(fā)送接收數(shù)據(jù)。測試了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個(gè)宏定義測試了3個(gè)例子。

#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
        
    }
}

在如下位置定義宏定義開關(guān)選擇測試?yán)印?/p>

定義HID_MOUSE_TEST是使用hid_mouse_template.c例子,實(shí)現(xiàn)的是一個(gè)鼠標(biāo)指針動作。

定義MSC_RAM_TEST是使用msc_ram_template.c例子,實(shí)現(xiàn)的是一個(gè)u盤。

上電插上USB后會識別出U盤來,并且彈出需要格式化。格式化之后就可以看到容量了,可以讀寫數(shù)據(jù)了。

不過這只是用RAM模擬的存儲區(qū),斷電會消失。

可以看到識別的設(shè)備了。

下一步就是格式化U盤。

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

定義CDC_ACM_HID_MSC_TEST是使用cdc_acm_hid_msc_template.c例子,實(shí)現(xiàn)的是一個(gè)復(fù)合設(shè)備,包含HID,MSC,CDC 3個(gè)類。

其中HID我簡單改了下,改成了USB的手柄控制器。

編譯下載之后,會出現(xiàn)3個(gè)設(shè)備。其中串口CDC沒有裝上驅(qū)動,有感嘆號。等下裝個(gè)驅(qū)動測試。MSC會要求格式化。

下面就是游戲控制器手柄

下面為串口CDC裝個(gè)驅(qū)動,這個(gè)會提示驅(qū)動不匹配之類的,不管他,先確定繼續(xù)。

裝好驅(qū)動之后就出來串口了。感嘆號也消失了。

下面看看串口數(shù)據(jù)。打開串口6。

測試連續(xù)發(fā)送數(shù)據(jù)2048字節(jié)。

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

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險(xiǎn)等級 參考價(jià)格 更多信息
74LVC244APW,118 1 NXP Semiconductors 74LVC(H)244A - Octal buffer/line driver; 3-state TSSOP2 20-Pin
$0.36 查看
IL207AT 1 Telefunken Semiconductor GmbH & Co Kg Transistor Output Optocoupler, 1-Element, 3000V Isolation,
暫無數(shù)據(jù) 查看
TJA1051T/E/1J 1 NXP Semiconductors TJA1051 - High-speed CAN transceiver SOIC 8-Pin

ECAD模型

下載ECAD模型
$0.39 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜