EDK II 源码剖析---USB协议之EHCI(例子)二

上一节主要讲了USB主控制器驱动的一般流程,接下来主要讲一下USB 总线驱动和USB 设备驱动

USB总线驱动

同样的,从下面的函数开始说起:

EFI_STATUS
EFIAPI
UsbBusControllerDriverStart (
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
  IN EFI_HANDLE                   Controller,
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
  )
{......

尝试打开USB BUS Protocol 判断UsbBus 驱动程序是否已经在当前主控制器句柄上启动。

如果第一次启动,则需要调用UsbBusBuildProtocol()进行初始化。

 //
    // If first start, build the bus execute environment and install bus protocol
    //
    REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_IO_BUS_USB | EFI_P_PC_ENABLE));
    Status = UsbBusBuildProtocol (This, Controller, RemainingDevicePath);

整体流程如下图:

USB Device(Mass Storage)驱动初始化的流程

 重启USB(MASS DEVICE)设备

 

版权声明:本文为CSDN博主「潇洒Anthony」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011397314/article/details/122338270

上一节主要讲了USB主控制器驱动的一般流程,接下来主要讲一下USB 总线驱动和USB 设备驱动

USB总线驱动

同样的,从下面的函数开始说起:

EFI_STATUS
EFIAPI
UsbBusControllerDriverStart (
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
  IN EFI_HANDLE                   Controller,
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
  )
{......

尝试打开USB BUS Protocol 判断UsbBus 驱动程序是否已经在当前主控制器句柄上启动。

如果第一次启动,则需要调用UsbBusBuildProtocol()进行初始化。

 //
    // If first start, build the bus execute environment and install bus protocol
    //
    REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_IO_BUS_USB | EFI_P_PC_ENABLE));
    Status = UsbBusBuildProtocol (This, Controller, RemainingDevicePath);

整体流程如下图:

USB Device(Mass Storage)驱动初始化的流程

 重启USB(MASS DEVICE)设备

 

版权声明:本文为CSDN博主「潇洒Anthony」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011397314/article/details/122338270

生成海报
点赞 0

潇洒Anthony

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

GD32利用CubeMX构建代码的测试

前言 近期搞到一块GD32F103c8t6的开发板,号称是和STM32F103C8T6 Pin To Pin兼容的,查了一些资料,很多老哥也搞过类似的测试,多半结果是不兼容&#xff0c