This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/EK-TM4C1294XL:Linux 的 USB_DEV_BULK 示例

Guru**** 2350610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/612214/linux-ek-tm4c1294xl-usb_dev_bulk-example-with-linux

器件型号:EK-TM4C1294XL

工具/软件:Linux

您好!

我一直尝试使用 USB_DEV_BULK 示例在 TM4C1294XL 和运行于 Linux Fedora 25上的 PC 之间交换数据、但没有成功。 在 TM4C1294XL 代码中,我完全删除了 UART 部分,并将 GPIOPinWrite()添加到了 RXHandler() ,只是为了表示任何接收事件,没有发生任何事情。 此外、在我通过 C++中的 libusb 库实现的 PC 端、没有传入数据。

有什么建议吗?

此致、

密耳

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Milos、

     您是否可以在 Windows (即 Win7)计算机上测试相同的修改代码并查看其是否正常工作。 这可能是 Linux 方面的驱动程序问题。 请查看此 Linux USB 驱动程序网页。  

     您需要修改 USB 供应商和产品 ID。 我粘贴的以下修改代码适用于其他 TI 器件。 您可以针对 TM4C 对其进行修改。  

    USB_transfer.c
    
    #include 
    #include 
    #include 
    
    #define min (a、b)(((a)<=(b))? (a):(b)
    #define BULK_EP_OUT 0x01
    #define BULK_EP_IN 0x82
    #define MAX_PKT_SIZE 512
    
    static struct USB_device *设备;
    static struct USB_class_driver class;
    static unsigned char buld_buf[MAX_PKT_SIZE];
    
    static int pin_open (struct inode i、struct i)
    
    
    
    
    *关闭*文件
    0 *、t t_struct 文件
    *
    静态 ssssize_t pin_read (struct file *f、char __user *buf、size_t cnt、LOFF_t *off)
    {
    int retval;
    int read_cnt;
    
    //从批量端点读取数据*/
    retval = USB_bulkpipe (device、USB_rcvbulkpipe (device、bulk_bul_sbul_t_size
    、PK_size、t_size) read_cnt、5000);
    if (retval)
    {
    printk (Kern_ERR "批量消息返回%d\n"、retval);
    返回 retval;
    }
    if (copy_to _user (buf、bULK_buf、 min (cnt、read_cnt))
    ){
    return -eft;
    }
    
    return min (cnt、read_cnt);
    }
    static ssize_t pin_write (struct file *f、const char __user *buf、size_t cnt、LOFF_t *off)
    ;{
    int retval;
    int write_cnt =(struct char __user * buf、size_t、size_t、
    
    max (if)、cnt、cnt (pulf)、cnt、cnt、copy_copy (if)、min (cpu_cault (if max_PKT_size))
    ){
    return -efault;
    }
    
    //将数据写入批量端点*/
    retval = USB_bulkmsg (device、USB_sndbulkpipe (device、bulk_ep_out)、
    bulk_buf、min (cnt、 max_PKT_size)、&write_cnt、5000);
    if (retval)
    {
    printk (Kern_ERR "批量消息返回%d\n"、retval);
    retval;
    }retval;}
    
    retrate_cnt;
    }
    
    static struct file_operations FOPS =
    {
    .open = pen _open、
    .release = pen _close、
    .read = pen
    、.read
    ;
    
    static int pin_probe (struct usb_interface *接口,const struct usb_device_id * id)
    {
    int retval;
    
    device = interface_TO_usbdev (interface
    
    
    
    ,class);class.name ="USB/ti_usbbbbbbbbstul%d";class.FOPS =&FOPS;if ((retval = USB_register_dev (interface,class)))<"*无法
    
    注册此
    设备的次要设备
    
    否则
    {
    printk (Kern_info "获得的次要:%d\n"、interface->minor);
    }
    
    返回 retval;
    }
    
    静态空 pEN_DISCONNECT (struct USB_interface *接口)
    {
    USB_unistry_dev (interface、&class);
    }
    
    /*与此驱动程序配合使用的器件表*/
    静态结构 USB_DEVICE_ID PEN 表[]=
    {
     USB_DEVICE (0x1CBE、0x0003)},//TI 的 USB 大容量器件(OMAPL138)
    {}//终止条目*/
    };
    MODULE_DEVICE_TABLE (USB、PEN 表);
    
    静态结构 USB_driver pin_driver =
    {
    .name ="pin_driver"、
    .probe = pin_probe、
    .disconnect = pin_disconnect、
    .id_table = pin_table、
    };
    
    static int __init pin_init (void)
    {
    int result;
    
    //使用 USB 子系统注册此驱动程序*/
    if (result=USB_register (&pin_driver))
    ){
    printk ("USB_register failed。 错误编号%d、结果);
    }
    返回结果;
    }
    
    静态 void __exit pann_exit (void)
    {
    //*使用 USB 子系统对该驱动程序进行降序*
    / USB_reuncister (&pin_driver);
    }
    
    module_init (pin_init);
    module_exit (Kumar_exit);
    
    module_license ("GPL");
    module_Author ("Anugpen Pugile" ");
    module_description ("USB Pen Device Driver");
    
    
    Makefile:
    
    obj-m += usb_transfer.o
    
    所有:
    make -C /lib/modules /$(shell uname -r)/build M=$(pWD) modules
    
    
    clean:
    make -C /lib/modules /$(shell uname -r)/build M=$(p......) clean
    
    
    驱动
    
    
    
    
    程序:inc、然后将 smok_transfer 插入到 usb PC 中并运行 smok.d
    
    测试步骤:
    回显"USB 批量测试..." >/dev/ti_usbbulk
    
    您可以看到连接到 LCDK 板的 VGA 监视器上的 Rx 字节计数增加。 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    你是我的英雄!!! 非常感谢。 它的作用是:))

    此致、

    密耳

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴您的问题得到解决。