下载
中文
注册

USB接口调测参考

本章节以其中一个不同于Atlas 200I DK A2 开发者套件Atlas 500 A2 智能小站的用户底板设计为例,根据底板的设计来配置对应USB接口的userBaseConfig文件和DTB文件。

背景信息

调测USB接口需要修改PCIe的.dtsi文件,配置PCIe控制器,否则可能导致启动挂死。

前提条件

已获取设备boardid,本章节以33150为例。具体请参见用户必读

用户底板的adc_board_id为33,Atlas 200I A2 加速模块的算力为20T(adc_board_id为150),用户整机(Atlas 200I A2 加速模块+底板)boardid为33150(对应十六进制817e)。

修改和编译userBaseConfig和DTB文件

本操作以首次调测接口为例介绍。

  1. 登录准备环境所搭建Linux服务器。
  2. 执行如下命令,切换至root用户。

    su - root

  3. 使用WinSCP工具,将下载软件包获取的源码包“Ascend310B-source.tar.gz”上传至root用户属组目录下,例如“/opt”。详细操作请参见使用WinSCP传输文件
  4. 执行如下命令,进入源码包所在目录“/opt”。

    cd /opt

  5. 执行如下命令,解压源码包“Ascend310B-source.tar.gz”。

    tar -xzvf Ascend310B-source.tar.gz

  6. 执行如下命令,进入“Ascend310B-source”目录。

    cd Ascend310B-source

  7. 修改“user_base_config.xml”配置文件。
    1. 执行如下命令,进入配置文件所在目录。

      cd config/adaptive/adaptive_config/

    1. 执行如下命令,打开“user_base_config.xml”文件。

      vim user_base_config.xml

    2. 在“user_base_config.xml”中配置用户整机对应的board_idchip0_strategymax_powerserdes_info。具体参数含义请参见表1表2
      <item name="product_strategy_info"><!--产品板策略ID-->
      <!--33150 对应十六进制817e-->
      <param board_id ="817e" phy_num = "1" chip0_strategy="0" max_power="0"  equal="0"/>
      </item>
      
      <item name="evb_strategy_info">
      </item>
      
      <item name="strategy_info_array"><!--启动策略矩阵-->
      <subitem subname="sub_strategy0">
      <module class="serdes">
      <submodule subclass="serdes_info">
      <param lan_index="0" serdes_type="PCIE" ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="2"  align_mode="0" frequency="PCIE_GEN2" port_index = "0"/>
      <param lan_index="1" serdes_type="PCIE" ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="ff" align_mode="0" frequency="PCIE_GEN2" port_index = "0"/>
      <param lan_index="2" serdes_type="SATA" ssc_enable="1" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="ff" align_mode="0" frequency="SATA3.0"     port_index = "0"/>
      <param lan_index="3" serdes_type="PCIE" ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="1"  align_mode="0" frequency="PCIE_GEN2" port_index = "0"/>
      <param lan_index="4" serdes_type="ETH" ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "1" bandwidth="ff"  align_mode="0" frequency="1GE" port_index = "0"/>
      <param lan_index="5" serdes_type="ETH"  ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "1" bandwidth="ff" align_mode="0" frequency="1GE" port_index = "0"/>
      <param lan_index="6" serdes_type="USB"  ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="ff" align_mode="0" frequency="USB3.0" port_index = "0"/>
      <param lan_index="7" serdes_type="USB"  ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="ff" align_mode="0" frequency="USB3.0" port_index = "0"/>
      </submodule>
      </module>
      • 第一处加粗字体修改为用户产品的实际boardid以及算力等级,各参数含义如下。
        表1 参数说明

        param

        配置值

        说明

        board_id

        如33150对应十六进制817e。

        十六进制的boardid。

        boardid为用户实际使用底板的adc_board_id与Atlas 200I A2 加速模块的adc_board_id的组合值。

        phy_num

        1。

        多p系统才会使用,固定为1。

        chip0_strategy

        0~n。

        策略索引号。对应代码中的sub_strategy0和sub_strategy1。

        max_power

        • 0表示20T。
        • 2表示8T。

        最大算力档位。

        euqal

        0-n。

        匹配DTB时等效board_id使用,保持默认配置0即可。

      • 第二处加粗字体修改为用户产品的实际SerDes配置,具体规则如下。
        • PCIe控制器0(lane0~lane1)支持RC/EP模式,其他PCIe控制器只支持RC模式。
        • Macro0(lane0~lane3)中若存在PCIe和其他协议(SATA)共存,则PCIe只能支持到PCIE_GEN2;若只存在PCIe协议,则PCIe支持到PCIE_GEN3。
        • PCIe支持降lane应用,如PCIe x4降lane到PCIe x2/x1。
        • Macro0(lane0~lane3)支持PCIE和SATA协议,Macro1(lane4~lane7)支持PCIe、USB、GE协议,每个Macro同时最多只能配置两种协议。
        • SATA只能在Macro0(lane0~lane3)使用。
        • USB控制器0(lane4)只支持HOST,USB控制器1~USB控制器3(lane5~lane7)支持HOST+DEVICE。
        • USB只能在Macro1(lane4~lane7)使用。
        • 若为系统直出的USB 2.0,则无需配置SerDes。

        各参数含义如下。

        表2 参数说明

        param

        配置值

        说明

        lan_index

        0~7

        lane编号,Atlas 200I A2 加速模块一共有8条serdes lane。

        serdes_type

        Atlas 200I A2 加速模块支持PCIE、SATA、USB、ETH

        该条lane使用的协议。

        ssc_enable

        • 0:否
        • 1:是

        是否开展频a,只有用作PCIe和SATA时才能打开。

        polarity_tx

        • 0:否
        • 1:是

        tx极性是否翻转。

        polarity_rx

        • 0:否
        • 1:是

        rx极性是否翻转。

        lan_order

        • 0:否
        • 1:是

        lane序是否反转。只有用作ETH时需要修改,具体请参见《Atlas 200I A2 加速模块 硬件开发指南》的“以太网接口”章节

        bandwidth

        • 1表示x1。
        • 2表示x2。
        • 4表示x4
        • ff表示不配置。

        用作PCIe时,表示位宽x4/x2/x1,其他协议不使用。

        • x4:使用四条lane。
        • x2:使用两条lane。
        • x1:使用一条lane。

        align_mode

        0

        该lane是master还是slave,Atlas 200I A2 加速模块不使用该参数。

        frequency

        • PCIE_GEN2
        • PCIE_GEN3
        • 1GE
        • 2.5GE
        • USB3.0。
        • SATA3.0。

        使用的频点b,主要用来区分PCIE GEN2/3,和ETH的1GE/2.5GE。

        port_index

        0~n

        用作ETH时,表示lane的网口端口号,其他协议不使用。不使用时设置为0。

        a:时钟展频通过频率调制的手段将集中在窄频带范围内的能量分散到设定的宽频带范围,通过降低时钟在基频和奇次谐波频率的幅度(能量),达到降低系统电磁辐射峰值的目的。

        b:PCIe的频点是指数据在总线上传输的速率,也称为数据传输速度。

        弹性配置中的SerDes复用关系参数必须与实际硬件单板保持一致,SerDes错误配置可能导致启动挂死,功能不可用。

        根据表3中用户产品的实际serdes配置,为使能接口功能,user_base_config.xml文件中serdes_info配置的示例如下。

        表3 SerDes接口复用关系

        lan编号

        协议

        是否开展频

        tx极性是否翻转

        rx极性是否翻转

        lane序是否反转

        位宽

        频点

        lane0

        PCIE

        x2

        PCIE_GEN2

        lane1

        PCIE

        不配置a

        PCIE_GEN2

        lane2

        SATA

        不配置

        SATA3.0

        lane3

        PCIE

        x1

        PCIE_GEN2

        lane4

        ETH

        不配置

        1GE

        lane5

        ETH

        不配置

        1GE

        lane6

        USB

        不配置

        USB3.0

        lane7

        USB

        不配置

        USB3.0

        a:lane0的PCIe位宽为x2,需要使用两条lane,所以lane1不设置位宽。

        user_base_config.xml文件中serdes_info配置如下。

        <submodule subclass="serdes_info">
        <param lan_index="0" serdes_type="PCIE" ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="2"  align_mode="0" frequency="PCIE_GEN2" port_index = "0"/>
        <param lan_index="1" serdes_type="PCIE" ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="ff" align_mode="0" frequency="PCIE_GEN2" port_index = "0"/>
        <param lan_index="2" serdes_type="SATA" ssc_enable="1" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="ff" align_mode="0" frequency="SATA3.0"   port_index = "0"/>
        <param lan_index="3" serdes_type="PCIE" ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="1"  align_mode="0" frequency="PCIE_GEN2" port_index = "0"/>
        <param lan_index="4" serdes_type="ETH" ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "1" bandwidth="ff"  align_mode="0" frequency="1GE" port_index = "0"/>
        <param lan_index="5" serdes_type="ETH"  ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "1" bandwidth="ff" align_mode="0" frequency="1GE" port_index = "0"/>
        <param lan_index="6" serdes_type="USB"  ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="ff" align_mode="0" frequency="USB3.0" port_index = "0"/>
        <param lan_index="7" serdes_type="USB"  ssc_enable="0" polarity_tx = "0" polarity_rx = "0" lan_order = "0" bandwidth="ff" align_mode="0" frequency="USB3.0" port_index = "0"/>
        </submodule>

        位宽只能配置为x4/x2/x1。

    3. 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
  8. 编译userBaseConfig文件。
    1. 执行如下命令,返回“Ascend310B-source”目录。

      cd /opt/Ascend310B-source

    2. 执行如下命令,编译userBaseConfig文件。

      bash build.sh usrBaseConfig

      出现如下回显,表示编译内核userBaseConfig文件成功。

      generate /opt/Ascend310B-source/output/userBaseConfig.bin success!
      sign /opt/Ascend310B-source/output/userBaseConfig.bin success!

      编译后的“userBaseConfig.bin”文件会自动存放于“Ascend310B-source/output”目录下。

  9. 新增并修改整机dts文件。

    用户整机的boardid为33150,故dts文件名称为“hi1910B-asic-M150-B33.dts”。具体请参见DTB文件

    1. 执行如下命令,进入dts文件目录。

      cd /opt/Ascend310B-source/dtb/dts/hi1910b/hi1910BL

    2. 执行如下命令,新增适配boardid33150的dts文件。

      cp hi1910B-asic-M150-B50.dts hi1910B-asic-M150-B33.dts

      将“hi1910B-asic-M150-B50.dts”另存为boardid33150的dts文件“hi1910B-asic-M150-B33.dts”。

    3. 执行以下命令修改dts文件,配置用户产品的实际整机boardid,确认所使用的PCIe的.dtsi文件和USB的.dtsi文件及路径,具体内容如下加粗字体所示。

      vim hi1910B-asic-M150-B33.dts

      compatible = "hisilicon,hi1910B-evb", "hisilicon,ascend610";
      hisi,boardid = <0x0 0x3 0x3 0x1 0x5 0x0>;  //修改为实际整机boardid
      #address-cells = <0x2>;
      #size-cells = <0x2>;
      interrupt-parent = <0x1>;
      model = "Hisilicon PhosphorHi1910B evb";
      
      /include/ "base/hi1910B-asic-kernel-rc.dtsi"
      /include/ "base/hi1910B-commmon-smmu.dtsi"
      /include/ "base/hi1910B-mpam.dtsi"
      /include/ "base/hi1910B-lp-pm.dtsi"
      /include/ "base/hi1910B-lp-devmng.dtsi"
      /include/ "base/hi1910B-mbigen-ao.dtsi"
      /include/ "base/hi1910B-gpio.dtsi"
      /include/ "base/hi1910B-ipcdrv.dtsi"
      /include/ "base/hi1910B-ts-drv.dtsi"
      /include/ "base/hi1910B-tsdrv.dtsi"
      /include/ "base/hi1910B-network-M150-B50.dtsi"
      /include/ "base/hi1910B-hidvpp.dtsi"
      /include/ "base/hi1910B-hdmi.dtsi"
      /include/ "product/hi1910B-audio.dtsi"
      /include/ "base/hi1910B-mipitx.dtsi"
      /include/ "base/hi1910B-vdp.dtsi"
      /include/ "base/hi1910B-isp.dtsi"
      /include/ "base/hi1910B-hilink.dtsi"
      /include/ "base/hi1910B-mntn-milanr3.dtsi"
      /include/ "base/hi1910B-gpu.dtsi"
      /include/ "base/hi1910B-ctl.dtsi"
      /include/ "base/hi1910B-itrustee.dtsi"
      /include/ "base/hi1910B-sata.dtsi"
      /include/ "product/hi1910B-pcie-rc-M150-B50.dtsi" //确认所使用的PCIe的.dtsi文件及路径
      /include/ "product/hi1910B-mdio-M150-B50.dtsi"
      /include/ "product/hi1910B-pinctrl-M150-B50.dtsi"
      /include/ "product/hi1910B-can-M150-B50.dtsi"
      /include/ "product/hi1910B-hiusbc-B50.dtsi" //确认所使用的USB的.dtsi文件及路径
      /include/ "product/hi1910B-emmc-M150-B50.dtsi"
      /include/ "product/hi1910B-i2c-M150-B50.dtsi"
      /include/ "product/hi1910B-spi-M150-B50.dtsi"
    4. 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
  10. 修改PCIe的.dtsi文件,配置PCIe控制器。
    1. 执行如下命令进入“product”目录,并修改PCIe的.dtsi文件。

      cd product

      vim hi1910B-pcie-rc-M150-B50.dtsi

      根据7.c中配置的serdes_info选择需要开放的PCIe控制器,lan_index与PCIe控制器的对应关系如下。

      lan_index

      控制器

      lane0~lane1

      PCIe控制器0

      lane2~lane3

      PCIe控制器1

      lane4~lane5

      PCIe控制器2

      lane6~lane7

      PCIe控制器3

      7.cserdes_info配置为例,共使用了PCIe控制器0、PCIe控制器1,则在PCIe的.dtsi文件中保留PCIe控制器0、PCIe控制器1两个控制器的配置,将PCIe控制器2、PCIe控制器3的配置代码注释即可,其中/**/代表注释代码段,具体修改如下所示。

      pcie@0x820000000 {
      compatible = "pci-host-ecam-generic";
      // ECAM 0x820000000 pci host bridge0 //
      reg = <0x8 0x20000000 0 0x00400000>;
      reg-names = "ecam-cfg";
      bus-range = <0x0 0x3>;
      msi-map = <0x0 &its 0x0 0x2000>;
      msi-map-mask = <0xffff>;
      #address-cells = <3>;
      #size-cells = <2>;
      device_type = "pci";
      dma-coherent;
      // BAR MAP: 32bit mem 64M, 64bit mem 256M //
      ranges = <0x02000000 0x0 0xB0000000 0x0 0xB0000000 0x0 0x04000000
      0x43000000 0x8 0x30000000 0x8 0x30000000 0x0 0x10000000>;
      #interrupt-cells = <1>;
      interrupt-map-mask = <0xf800 0 0 0x7>;
      // INTX //
      interrupt-map = <0x4000 0 0 1 &mbigen_pcie0_local 704 4
      0x4000 0 0 2 &mbigen_pcie0_local 705 4    //PCIe控制器0
      0x4000 0 0 3 &mbigen_pcie0_local 706 4
      0x4000 0 0 4 &mbigen_pcie0_local 707 4>;
      iommu-map = <0 &io_smmu 0 0x400>;
      status = "ok";
      };
      
      pcie@0x840000000 {
      compatible = "pci-host-ecam-generic";
      pcie-core-id = <1>;
      // ECAM 0x840000000 pci host bridge0
      reg = <0x8 0x40400000 0 0x00400000>;
      reg-names = "ecam-cfg";
      bus-range = <0x4 0x7>;
      msi-map = <0x400 &its 0x400 0x2000>;
      msi-map-mask = <0xffff>;
      #address-cells = <3>;
      #size-cells = <2>;
      device_type = "pci";
      dma-coherent;
      // BAR MAP: 32bit mem 64M, 64bit mem 256M
      ranges = <0x02000000 0x0 0xB4000000 0x0 0xB4000000 0x0 0x04000000
      0x43000000 0x8 0x50000000 0x8 0x50000000 0x0 0x10000000>;
      #interrupt-cells = <1>;
      interrupt-map-mask = <0xff0000 0 0 0x7>;
      // INTX
      interrupt-map = <0x40000 0 0 1 &mbigen_pcie1_local 712 4
      0x40000 0 0 1 &mbigen_pcie1_local 713 4    //PCIe控制器1
      0x40000 0 0 1 &mbigen_pcie1_local 714 4
      0x40000 0 0 1 &mbigen_pcie1_local 715 4>;
      iommu-map = <0x400 &io_smmu 0x400 0x400>;
      status = "ok";
      };
      
      /*
      pcie@0x860000000 {
      compatible = "pci-host-ecam-generic";
      // ECAM 0x860000000 pci host bridge0 //
      reg = <0x8 0x60800000 0 0x00400000>;
      reg-names = "ecam-cfg";
      bus-range = <0x8 0xb>;
      msi-map = <0x800 &its 0x800 0x2000>;
      msi-map-mask = <0xffff>;
      #address-cells = <3>;
      #size-cells = <2>;
      device_type = "pci";
      dma-coherent;
      // BAR MAP: 32bit mem 64M, 64bit mem 256M //
      ranges = <0x02000000 0x0 0xB8000000 0x0 0xB8000000 0x0 0x04000000
      0x43000000 0x8 0x70000000 0x8 0x70000000 0x0 0x10000000>;
      #interrupt-cells = <1>;
      interrupt-map-mask = <0xf800 0 0 0x7>;
      // INTX //
      interrupt-map = <0x4000 0 0 1 &mbigen_pcie2_local 720 4
      0x4000 0 0 2 &mbigen_pcie2_local 721 4      //PCIe控制器2
      0x4000 0 0 3 &mbigen_pcie2_local 722 4
      0x4000 0 0 4 &mbigen_pcie2_local 723 4>;
      iommu-map = <0x800 &io_smmu 0x800 0x400>;
      status = "ok";
      };
      */
      
      /*
      pcie@0x900000000 {
      compatible = "pci-host-ecam-generic";
      pcie-core-id = <3>;
      // ECAM 0x900000000 pci host bridge0
      reg = <0x9 0x00c00000 0 0x00400000>;
      reg-names = "ecam-cfg";
      bus-range = <0xc 0xf>;
      msi-map = <0xc00 &its 0xc00 0x2000>;
      msi-map-mask = <0xffff>;
      #address-cells = <3>;
      #size-cells = <2>;
      device_type = "pci";
      dma-coherent;
      // BAR MAP: 32bit mem 64M, 64bit mem 256M
      ranges = <0x02000000 0x0 0xBC000000 0x0 0xBC000000 0x0 0x04000000
      0x43000000 0x9 0x10000000 0x9 0x10000000 0x0 0x10000000>;
      #interrupt-cells = <1>;
      interrupt-map-mask = <0xff0000 0 0 0x7>;
      // INTX
      interrupt-map = <0xc0000 0 0 1 &mbigen_pcie3_local 728 4
      0xc0000 0 0 1 &mbigen_pcie3_local 729 4    //PCIe控制器3
      0xc0000 0 0 1 &mbigen_pcie3_local 730 4
      0xc0000 0 0 1 &mbigen_pcie3_local 731 4>;
      iommu-map = <0xc00 &io_smmu 0xc00 0x400>;
      status = "ok";
      };
      */
      • 若配置PCIe位宽为x4,例如lane0配置为x4,则只需要配置PCIe控制器0即可,无需配置PCIe控制器1。
      • /**/代表注释代码段,注释成功后,部分软件可能不显示注释格式,如MobaXterm,但不影响注释结果。
    2. 配置完成后按“Esc”键,再执行:wq!命令保存修改,并按“Enter”键退出。
  11. 修改USB的.dtsi文件。
    1. 执行如下命令进入“product”目录,并修改USB的dtsi文件。

      cd product

      vim hi1910B-hiusbc-B50.dtsi

      根据7.c中配置的serdes_info选择需要开放的USB控制器,lan_index与USB控制器的对应关系如下。

      lan_index

      控制器

      lane4

      USB控制器0

      lane5

      USB控制器1

      lane6

      USB控制器2

      lane7

      USB控制器3

      • 若产品存在系统直出的USB 2.0接口,该接口不占用SerDes的lane,但需要根据硬件设计开放对应的USB控制器,并将u2-only参数修改为1。
      • 本章以无系统直出的USB 2.0接口为例。

      7.cserdes_info配置为例,共使用了USB控制器2和USB控制器3,则在dtsi文件中保留USB控制器2和USB控制器3的配置,将USB控制器0和USB控制器1的配置代码注释即可,其中/**/代表注释代码段,具体修改如下所示。

      /*
      hiusbc0@A5000000 {
      compatible = "hisilicon,hiusbc";
      reg = <0x0 0xA5000000 0x0 0x80000>;    // USB_CTRL0 BASE
      interrupt-parent = <&mbigen_usb0>;
      interrupts = <918 4>;
      maximum-speed = "super-speed";
      dma-coherent;
      mode = <1>;                             // 1:host 2:device
      usb-id = <0>;                           // USB Controller id
      u2-only = <0>;
      io-subctrl-base = <0x0 0xA0120000 0x0 0x10000>;
      pcs-base = <0x0 0xA0800000 0x0 0x100>;
      }
      */
      
      /*
      hiusbc1@A5080000 {
      compatible = "hisilicon,hiusbc";
      reg = <0x0 0xA5080000 0x0 0x80000>;    // USB_CTRL1 BASE
      interrupt-parent = <&mbigen_usb1>;
      interrupts = <922 4>;
      maximum-speed = "super-speed";
      dma-coherent;
      mode = <2>;                             // 1:host 2:device
      usb-id = <1>;                           // USB Controller id
      u2-only = <0>;
      io-subctrl-base = <0x0 0xA0120000 0x0 0x10000>;
      pcs-base = <0x0 0xA0804000 0x0 0x100>;
      
      phy {
      phy_base = <0x0 0xa0810000 0x0 0x200>;
      cfg_off = <0x14>;
      cfg_mask = <0x3FFC0000>;
      cfg_value = <0x4350040>;
      };
      };
      */
      
      hiusbc2@A5100000 {
      compatible = "hisilicon,hiusbc";
      reg = <0x0 0xA5100000 0x0 0x80000>;    // USB_CTRL2 BASE
      interrupt-parent = <&mbigen_usb2>;
      interrupts = <926 4>;
      maximum-speed = "super-speed";
      dma-coherent;
      mode = <1>;                             // 1:host 2:device
      usb-id = <2>;                           // USB Controller id
      u2-only = <0>;
      io-subctrl-base = <0x0 0xA0120000 0x0 0x10000>;
      pcs-base = <0x0 0xA0808000 0x0 0x100>;
      
      phy {
      phy_base = <0x0 0xa0810200 0x0 0x200>;
      cfg_off = <0x14>;
      cfg_mask = <0x3FFC0000>;
      cfg_value = <0xC310040>;
      };
      };
      
      hiusbc3@A5180000 {
      compatible = "hisilicon,hiusbc";
      reg = <0x0 0xA5180000 0x0 0x80000>;    // USB_CTRL3 BASE
      interrupt-parent = <&mbigen_usb3>;
      interrupts = <930 4>;
      maximum-speed = "super-speed";
      dma-coherent;
      mode = <1>;                             // 1:host 2:device
      usb-id = <3>;                           // USB Controller id
      u2-only = <0>;
      io-subctrl-base = <0x0 0xA0120000 0x0 0x10000>;
      pcs-base = <0x0 0xA080C000 0x0 0x100>;
      
      phy {
      phy_base = <0x0 0xa0810400 0x0 0x200>;
      cfg_off = <0x14>;
      cfg_mask = <0x3FFC0000>;
      cfg_value = <0x5350040>;
      };
      };

      再根据具体功能要求修改USB控制器的配置参数,需要修改的参数如表4所示,此处以USB控制器1为例,需要配置的参数如下内容中加粗字体所示。

      表4 控制器参数

      参数

      配置值

      说明

      mode

      1,2

      支持host与device切换,其中1为host配置,2为device配置。

      u2-only

      0,1

      支持USB 3.0与USB 2.0切换,其中0为USB 3.0配置,1为USB 2.0配置。当该控制器只支持USB 2.0时,需要将此参数修改为1。

      在计算机领域中,host通常指的是一台计算机或服务器,它可以提供服务或资源给其他计算机或设备使用。host通常是指网络中的主机,也可以是一个操作系统中的主机。

      而device通常指的是一种计算机外围设备,例如打印机、扫描仪、摄像头、键盘、鼠标等。这些设备通常需要连接到计算机或服务器上才能使用。在移动设备领域中,device通常指的是智能手机、平板电脑、手持设备等。

      hiusbc1@A5080000 {
      compatible = "hisilicon,hiusbc";
      reg = <0x0 0xA5080000 0x0 0x80000>;    // USB_CTRL1 BASE
      interrupt-parent = <&mbigen_usb1>;
      interrupts = <922 4>;
      maximum-speed = "super-speed";
      dma-coherent;
      mode = <2>;                             // 1:host 2:device
      usb-id = <1>;                           // USB Controller id
      u2-only = <0>;
      io-subctrl-base = <0x0 0xA0120000 0x0 0x10000>;
      pcs-base = <0x0 0xA0804000 0x0 0x100>;
      
      phy {
      phy_base = <0x0 0xa0810000 0x0 0x200>;
      cfg_off = <0x14>;
      cfg_mask = <0x3FFC0000>;
      cfg_value = <0x4350040>;
      };
      };

      USB控制器0只支持host,不支持device。

    2. 按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
  12. 将新增的整机dts文件添加到编译路径中。
    1. 执行如下命令,进入“dtbtool”目录。

      cd /opt/Ascend310B-source/dtb/dtbtool/

    2. 执行如下命令,修改CMakelists文件,将所增加的dts文件添加到编译路径中,具体修改如下加粗字体所示。

      vim CMakeLists.txt

      set(DTS_BASE_DIR ${TOP_DIR}/tools/customize/dts)
      if(PRODUCT STREQUAL "ascend310Besl" OR
         PRODUCT STREQUAL "ascend310B" OR
         PRODUCT STREQUAL "ascend310Bemu" OR
         PRODUCT STREQUAL "ascend310Brc" OR
         PRODUCT STREQUAL "ascend310Brcesl" OR
         PRODUCT STREQUAL "ascend310Brcemu")
          # 当前driver跟esl用相同的dts,后期需要更新到单独的目录
          set(DTS_SRC_DIR ${DTS_BASE_DIR}/hi1910b/hi1910BL)
          set(DTS_FILE_LIST hi1910B-default.dts unreleased/hi1911-esl/hi1911-esl-b600.dts unreleased/hi1911-esl/hi1911-esl-rc-b600.dts unreleased/hi1911-fpga/hi1911-fpga-b600_b0.dts unreleased/hi1911-fpga/hi1911-fpga-b600_b0_b1.dts unreleased/hi1911-fpga/hi1911-fpga-b600_b0_b2.dts unreleased/hi1911-fpga/hi1911-fpga-rc-b600_b0.dts unreleased/hi1911-fpga/hi1911-fpga-rc-b600_b0_b1.dts unreleased/hi1911-fpga/hi1911-fpga-rc-b600_b0_b2.dts hi1910B-evb-900.dts hi1910B-evb-901.dts hi1910B-evb-902.dts hi1910B-evb-903.dts hi1910B-evb-905.dts hi1910B-asic-M150-B50.dts hi1910B-asic-M100-B51.dts hi1910B-asic-M150-B51.dts hi1910B-asic-M160-B51.dts hi1910B-asic-M100-B00.dts hi1910B-asic-M101-B00.dts hi1910B-asic-M150-B00.dts hi1910B-asic-M151-B00.dts  hi1910B-asic-M150-B33.dts)

      新增加的dts只能在加粗字体段落末尾添加。

    3. 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
  13. 编译DTB文件。
    1. 执行如下命令,返回“Ascend310B-source”目录。

      cd /opt/Ascend310B-source

    2. 执行如下命令,编译DTB文件。

      bash build.sh dtb

      出现如下回显,且生成“dt.img”文件表示编译内核userBaseConfig文件成功。

      generate /opt/Ascend310B-source/output/dt.img success! 
      sign /opt/Ascend310B-source/output/dt.img success!

      编译后的“dt.img”文件会自动存放于“Ascend310B-source/output”目录下。

生效userBaseConfig和DTB文件

  1. 准备网线,连接PC和Atlas 200I A2 加速模块底板网口,登录Atlas 200I A2 加速模块整机,具体操作请参见使用PuTTY登录设备(网口方式)
  2. 执行如下命令,切换至root用户。

    su - root

  3. 使用“WinSCP”,将编译后的“userBaseConfig.bin”和“dt.img”文件上传至任意目录下,例如“/run”。详细操作请参见使用WinSCP传输文件
  4. 升级“userBaseConfig.bin”文件。
    1. 执行如下命令,进入“/run”目录。

      cd /run

    1. 执行如下命令,升级“userBaseConfig.bin”文件。

      /var/davinci/driver/upgrade-tool --device_index -1 --component Usr_Base_Config --path userBaseConfig.bin

      出现如下回显,表示升级userBaseConfig.bin文件成功。

      {"device": 0, "succeed"}
  5. 升级“dt.img”文件。具体请参见生效DTB文件
  6. 升级完成后重启生效。

    reboot

    建议查看串口日志确认升级重启进展。

验证接口功能

以连接U盘为例,将配套的U盘连接到Atlas 200I A2 加速模块的底板上

  1. 将配套的U盘连接到Atlas 200I A2 加速模块的底板上
  2. 准备串口线,连接PC和Atlas 200I A2 加速模块底板串口。
  3. 登录Atlas 200I A2 加速模块OS。详细信息请参见使用PuTTY登录设备(串口方式)
    • Atlas 200I A2 加速模块(使用非Atlas 200I DK A2 开发者套件底板)USB接口登录的默认IP为192.168.1.2,Atlas 200I DK A2 开发者套件USB接口登录的默认IP为192.168.0.2。
    • Atlas 200I A2 加速模块上电后网络可以ping通,但无法通过SSH登录,请参见使用root用户SSH登录服务器出现Access Denied错误解决。
  4. 执行如下命令,查询硬盘是否在位。

    lsusb

    显示硬盘详细信息,如显示类似厂家信息即表示U盘在位。USB接口通信正常。