天天看點

Hi3516d平台的usb功能調試記錄

Hi3516d平台的usb功能調試記錄

其他平台類似,但與海思sdk版本和核心版本有關,相關配置位置和形式不一樣。hi3516av100核心版本為3.4.35

一、USB用作從機device

  1. usb大容量存儲

作為大容量儲存設備時核心配置如下:

1)啟用海思DMA(預設開啟)

Device Drivers  --->

        <*> Hisilicon DMAC Controller support

2)usb配置

Device Drivers  --->

        [*] USB support  --->

                <*>   Support for Host-side USB

                [*]    hiusb2.0 usb device support  --->

                         <*>   hisilicon highspeed device controller version 3.00a driver

                 <*>   USB Mass Storage support

                 <*>   USB Gadget Support  --->  

                        <M>   USB Peripheral Controller

                        <*>   USB Gadget Drivers (Mass Storage Gadget)  --->

其他配置使用預設即可,建議使用DMA模式。編譯後,可以檢視核心啟動資訊(或dmesg檢視):

console [ttyAMA0] enabled

uart:1: ttyAMA1 at MMIO 0x20090000 (irq = 41) is a PL011 rev2

bio: create slab <bio-0> at 0

SCSI subsystem initialized

... ...

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

... ...

usbcore: registered new interface driver usb-storage

USB Mass Storage support registered.

dwc_otg: version 3.00a 10-AUG-2012

Core Release: 3.10a

Setting default values for core params

Using Buffer DMA mode

Periodic Transfer Interrupt Enhancement - disabled

Multiprocessor Interrupt Enhancement - disabled

OTG VER PARAM: 0, OTG VER FLAG: 0

Dedicated Tx FIFOs mode

g_mass_storage gadget: Mass Storage Function, version: 2009/09/11

g_mass_storage gadget: Number of LUNs=1

 lun0: LUN: removable file: (no medium)

g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11

g_mass_storage gadget: userspace failed to provide iSerialNumber

g_mass_storage gadget: g_mass_storage ready

主要有usb核心驅動、otg驅動、大容量存儲驅動

此時接入電腦USB,可以在電腦的裝置管理器中檢視到“USB大容量儲存設備”,運作正常。

如果電腦仍沒有識别到裝置插入的話,檢查usb順序是否有問題;檢查外設控制寄存器MISC_CTRL30配置是否正确[bit31] 0 -- host,1 -- device

說明:上面配置中将驅動編譯進核心,也可以編譯成子產品.ko檔案,然後加載。

編譯過一次核心之後,編譯成子產品時可以通過指令單獨編譯:

make -C /home/wigewige/linux-3.4.y M=/home/wigewige/linux-3.4.y/drivers/usb/gadget ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-

-C:指定.config檔案路徑

M:指定要編譯的子產品路徑

ARCH:指定交叉編譯工具

  1. usb檔案存儲(u盤)

用作u盤時,把上面gadget中的“Mass Storage Gadget”改成“File-backed Storage Gadget (DEPRECATED)”即可,

生成的驅動檔案為“g_file_storage.ko”,該部分建議以子產品形式編譯,然後手動加載,因為要制定存儲媒體,加載的時候制定對應參數。詳細使用參考海思《外圍裝置驅動 操作指南.pdf》。

驅動加載後可以在電腦中識别為U盤,但操作U盤還需要做其他配置(沒有測試驗證)。

  1. uvc裝置端

作為uvc裝置是核心配置如下:

  1. 多媒體配置

Device Drivers  --->

       <*> Multimedia support  --->

              [*]   Media Controller API (EXPERIMENTAL)

              <*>   Video For Linux

              [*]    V4L2 sub-device userspace API (EXPERIMENTAL)

              [*]   Video capture adapters (NEW)  --->

                     [*]   V4L USB devices (NEW)  --->

                            <*>   USB Video Class (UVC)

                            [*]     UVC input events device support (NEW)

                            <*>   CPiA2 Video For Linux

                     [*]   V4L platform devices  --->

                            <*>   SoC camera support

                            <*>     platform camera support

2)usb配置

Device Drivers  --->

       [*] USB support  --->

              <*>   Support for Host-side USB

              [*]    USB announce new devices

              [*]    USB device class-devices (DEPRECATED)

              [*]    hiusb2.0 usb device support  --->

                     <*>   hisilicon highspeed device controller version 3.00a driver

              <*>   USB Gadget Support  --->  

                     <M>   USB Peripheral Controller

                     <*>   USB Gadget Drivers (USB Webcam Gadget)  --->  

其他配置使用預設即可,建議使用DMA模式。

可以根據實際情況選擇編譯進核心或子產品。編譯成子產品則有以下子產品:

dwc_otg.ko    

g_webcam.ko

uvcvideo.ko

videobuf2-core.ko

videobuf2-memops.ko

videobuf2-vmalloc.ko

videodev.ko

手動加載驅動時如果有報錯可以通過dmesg檢視,一般出錯的原因是有依賴關系,加載順序不正确導緻的。加載順序如下:

insmod dwc_otg.ko

insmod videobuf2-core.ko

insmod videobuf2-memops.ko

insmod videobuf2-vmalloc.ko

insmod videodev.ko

insmod uvcvideo.ko

insmod g_webcam.ko

編譯進核心的子產品或手動加載的子產品,在核心啟動後通過指令可以檢視:ls /sys/module/

檢視裝置資訊:cat /proc/devices

檢視usb裝置資訊:lsusb 或 lsusb -v

如果驅動加載成功且沒有報錯的話,在電腦端應該能識别到UVC camera。但由于3516av100可用的usb 端點數量有限,g_webcam加載時報錯:

g_webcam gadget: uvc_function_bind

g_webcam gadget: Unable to allocate streaming EP

himm 0x10080044  ---> 0x00000024

himm 0x10080048  ---> 0x2288C8D4

讀取硬體配置寄存器GHWCFG1和GHWCFG2,可以檢視到除了ep0(雙向)之外,隻有兩個可用端點,一個in一個out。Usb協定中ep0為必備端點,上電即可使用,而其他端點需要通過ep0和主機建立連接配接時進行配置,配置後才可以使用。UVC協定中需要使用兩個IN ep,一個用作視訊控制VC,一個用作視訊流VS,是以在加載該驅動時擷取ep失敗,在綁定uvc功能子產品時報的錯。(海思方面答複是3516av100不支援)

注意:驅動本身最大支援到16個端點(含ep0),但是實際可用的受限于硬體,通過讀取寄存器擷取到可用端點總數和in/out端點數。

理論上可以複用ep0作為uvc的VC端點,因為ep0是雙向的;但實際驗證行不通,為此做了如下修改嘗試:

  1. VC複用ep0
  2. VC為空
  3. VC和VS共用端點

主要修改f_uvd.c中uvc_function_bind函數。

上面的修改均行不通,修改後再host對裝置進行配置時,setup報錯。

實際檢視代碼,關于uvc的描述符中定義了uvc控制類和uvc視訊流類:uvc_control_cls和uvc_fs_streaming_cls,還有一個uvc_hs_streaming_cls類。

如果要修改還需要對uvc協定和驅動代碼深入的了解,時間有限,沒有深入去了解。

二、USB用作主機host

作為大容量儲存設備時核心配置如下:

Device Drivers  --->

       [*] USB support  --->

              <*>   Support for Host-side USB

              [*]     USB announce new devices

              [*]   hiusb2.0 usb host support  --->

                     <*>   hisilicon highspeed device controller version 3.00a driver

                     [*]   hisilicon usb host controller support

                     [*]   hiusb-ehci usb host device support

                     [*]   hiusb-ohci usb host device support

其他配置使用預設即可,建議使用DMA模式。

注意:用作主機時沒有實際驗證,如有問題還需要檢查其他配置。另外,3516av200和3519的sdk中加入了主從自動切換的驅動,在gadget中配置。核心版本為3.18.20.