Переглянути джерело

Deploying to gh-pages from @ cherry-embedded/CherryUSB@fafc677743d8a3a98ac9de8b8118a390e47b0d2f 🚀

sakumisu 6 місяців тому
батько
коміт
6148138d12

BIN
_images/stm32_21.png


+ 4 - 5
_sources/quick_start/demo.rst.txt

@@ -177,6 +177,8 @@ USB Device 移植要点
 
 .. figure:: img/stm32_13.png
 
+- 如果芯片带 cache,cache 修改参考 :ref:`usb_cache` 章节
+
 - 调用 template 的内容初始化,并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS`
 
 .. figure:: img/stm32_15.png
@@ -212,13 +214,10 @@ USB Host 移植要点
 
 - 拷贝 **xxx_msp.c** 中的 `HAL_HCD_MspInit` 函数中的内容到 `usb_hc_low_level_init` 函数中,屏蔽 st 生成的 usb 初始化
 - 在中断函数中调用 `USBH_IRQHandler`,并传入 `busid`
+- 链接脚本修改参考 :ref:`usbh_link_script` 章节
+- 如果芯片带 cache,cache 修改参考 :ref:`usb_cache` 章节
 - 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS`
 - 启动线程
 
 .. figure:: img/stm32_18.png
 .. figure:: img/stm32_19.png
-
-- 如果使用 **msc**,并且带文件系统,需要自行添加文件系统文件了,对应的 porting 编写参考 **fatfs_usbh.c** 文件。
-
-.. figure:: img/stm32_21.png
-

+ 3 - 34
_sources/quick_start/rtthread.rst.txt

@@ -32,6 +32,7 @@
 * 在 USB 中断函数中调用 `USBD_IRQHandler`,并传入 `busid`
 * 调用 `usbd_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS`
 * 使用 `scons --target=mdk5` 或者 `scons` 进行编译,如果是mdk,需要使用 AC6 编译器
+* 如果芯片带 cache,cache 修改参考 :ref:`usb_cache` 章节
 
 主机配置
 --------------------------
@@ -57,37 +58,5 @@
 * 在 USB 中断函数中调用 `USBH_IRQHandler`,并传入 `busid`
 * 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS`
 * 使用 `scons --target=mdk5` 或者 `scons` 进行编译,如果是mdk,需要使用 AC6 编译器
-* 如果使用的是 GCC ,需要在链接脚本(需要放在 flash 位置)中添加如下代码:
-
-.. code-block:: C
-
-        /* section information for usbh class */
-        . = ALIGN(4);
-        __usbh_class_info_start__ = .;
-        KEEP(*(.usbh_class_info))
-        __usbh_class_info_end__ = .;
-
-
-举例如下:
-
-.. code-block:: C
-
-        /* The program code and other data into "FLASH" Rom type memory */
-        .text :
-        {
-        . = ALIGN(4);
-        *(.text)           /* .text sections (code) */
-        *(.text*)          /* .text* sections (code) */
-        *(.glue_7)         /* glue arm to thumb code */
-        *(.glue_7t)        /* glue thumb to arm code */
-        *(.eh_frame)
-
-        KEEP (*(.init))
-        KEEP (*(.fini))
-        . = ALIGN(4);
-        __usbh_class_info_start__ = .;
-        KEEP(*(.usbh_class_info))
-        __usbh_class_info_end__ = .;
-        . = ALIGN(4);
-        _etext = .;        /* define a global symbols at end of code */
-        } > FLASH
+* 链接脚本修改参考 :ref:`usbh_link_script` 章节
+* 如果芯片带 cache,cache 修改参考 :ref:`usb_cache` 章节

+ 22 - 6
_sources/quick_start/transplant.rst.txt

@@ -12,6 +12,7 @@ USB Device 移植要点
 - 描述符的注册、class的注册、接口的注册、端点中断的注册。不会的参考 demo 下的 template
 - 调用 `usbd_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBDEV_MAX_BUS`
 - 在中断函数中调用 `USBD_IRQHandler`,并传入 `busid`, 如果你的 SDK 中中断入口已经存在 `USBD_IRQHandler` ,请更改 USB 协议栈中的名称
+- 如果芯片带 cache,cache 修改参考 :ref:`usb_cache` 章节
 - 编译使用。各个 class 如何使用,参考 demo 下的 template
 
 USB Host 移植要点
@@ -22,7 +23,20 @@ USB Host 移植要点
 - 实现 `usb_hc_low_level_init` 函数(该函数主要负责 USB 时钟、引脚、中断的初始化)。该函数可以放在你想要放的任何参与编译的 c 文件中。如何进行 USB 的时钟、引脚、中断等初始化,请自行根据你使用的芯片原厂提供的源码中进行添加。
 - 调用 `usbh_initialize` 并填入 `busid` 和 USB IP 的 `reg base`, `busid` 从 0 开始,不能超过 `CONFIG_USBHOST_MAX_BUS`
 - 在中断函数中调用 `USBH_IRQHandler`,并传入 `busid`, 如果你的 SDK 中中断入口已经存在 `USBH_IRQHandler` ,请更改 USB 协议栈中的名称
-- 如果使用的是 GCC ,需要在链接脚本中添加如下代码(需要放在 flash 位置):
+- 链接脚本修改参考 :ref:`usbh_link_script` 章节
+- 如果芯片带 cache,cache 修改参考 :ref:`usb_cache` 章节
+- 编译使用。基础的 cdc + hid + msc 参考 `usb_host.c` 文件,其余参考 **platform** 目录下适配
+
+.. _usbh_link_script:
+
+主机链接脚本修改
+-----------------------
+
+在使用主机时,如果没有修改链接脚本,会报 `__usbh_class_info_start__` 和 `__usbh_class_info_end__` 未定义的错误。因为主机协议栈需要在链接脚本中添加一个 section 来存储 class 信息。
+
+- 如果使用的是 KEIL 无需修改
+
+- 如果使用的是 GCC ,需要在链接脚本中添加如下代码(需要放在 flash 位置,建议放最后):
 
 .. code-block:: C
 
@@ -68,15 +82,17 @@ GCC 举例如下:
         place in AXI_SRAM                         { block cherryusb_usbh_class_info };
         keep { section .usbh_class_info};
 
-- 编译使用。各个 class 如何使用,参考 demo 下的 `usb_host.c` 文件
 
-带 cache 功能的芯片使用注意
+.. _usb_cache:
+
+cache 配置修改
 -------------------------------
 
-协议栈以及 port 中不会对 cache 区域的 ram 进行 clean 或者 invalid,所以需要使用一块非 cache 区域的 ram 来维护。 `USB_NOCACHE_RAM_SECTION` 宏表示将变量指定到非 cache ram上,
-因此,用户需要在对应的链接脚本中添加 no cache ram 的 section。默认 `USB_NOCACHE_RAM_SECTION` 定义为  `__attribute__((section(".noncacheable")))`。
+对于带 cache 的芯片,协议栈以及 port 中不会对 cache 区域的 ram 进行 clean 或者 invalid,所以需要使用一块非 cache 区域的 ram 来维护。
+`USB_NOCACHE_RAM_SECTION` 宏表示将变量指定到非 cache ram上,默认 `USB_NOCACHE_RAM_SECTION` 定义为  `__attribute__((section(".noncacheable")))`。
+因此,用户需要在对应的链接脚本中添加 no cache ram 的 section,并且 section 段包含 `.noncacheable`。
 
-.. note:: 需要注意,光指定 section 是不够的,还需要配置该 section 中的 ram 是真的 nocache,一般需要配置 mpu 属性(arm 的参考 stm32h7 demo)。
+.. note:: 需要注意,光修改链接脚本中的 nocache section 是不够的,还需要配置该 section 中的 ram 是真的 nocache,一般需要配置 mpu 属性(arm 的参考 stm32h7 demo)。
 
 GCC:
 


+ 3 - 6
quick_start/demo.html

@@ -374,6 +374,7 @@
 <img alt="../_images/stm32_13.png" src="../_images/stm32_13.png" />
 </figure>
 <ul class="simple">
+<li><p>如果芯片带 cache,cache 修改参考 <a class="reference internal" href="transplant.html#usb-cache"><span class="std std-ref">cache 配置修改</span></a> 章节</p></li>
 <li><p>调用 template 的内容初始化,并填入 <cite>busid</cite> 和 USB IP 的 <cite>reg base</cite>, <cite>busid</cite> 从 0 开始,不能超过 <cite>CONFIG_USBDEV_MAX_BUS</cite></p></li>
 </ul>
 <figure class="align-default">
@@ -417,6 +418,8 @@
 <ul class="simple">
 <li><p>拷贝 <strong>xxx_msp.c</strong> 中的 <cite>HAL_HCD_MspInit</cite> 函数中的内容到 <cite>usb_hc_low_level_init</cite> 函数中,屏蔽 st 生成的 usb 初始化</p></li>
 <li><p>在中断函数中调用 <cite>USBH_IRQHandler</cite>,并传入 <cite>busid</cite></p></li>
+<li><p>链接脚本修改参考 <a class="reference internal" href="transplant.html#usbh-link-script"><span class="std std-ref">主机链接脚本修改</span></a> 章节</p></li>
+<li><p>如果芯片带 cache,cache 修改参考 <a class="reference internal" href="transplant.html#usb-cache"><span class="std std-ref">cache 配置修改</span></a> 章节</p></li>
 <li><p>调用 <cite>usbh_initialize</cite> 并填入 <cite>busid</cite> 和 USB IP 的 <cite>reg base</cite>, <cite>busid</cite> 从 0 开始,不能超过 <cite>CONFIG_USBHOST_MAX_BUS</cite></p></li>
 <li><p>启动线程</p></li>
 </ul>
@@ -426,12 +429,6 @@
 <figure class="align-default">
 <img alt="../_images/stm32_19.png" src="../_images/stm32_19.png" />
 </figure>
-<ul class="simple">
-<li><p>如果使用 <strong>msc</strong>,并且带文件系统,需要自行添加文件系统文件了,对应的 porting 编写参考 <strong>fatfs_usbh.c</strong> 文件。</p></li>
-</ul>
-<figure class="align-default">
-<img alt="../_images/stm32_21.png" src="../_images/stm32_21.png" />
-</figure>
 </section>
 </section>
 </section>

+ 3 - 30
quick_start/rtthread.html

@@ -198,6 +198,7 @@
 <li><p>在 USB 中断函数中调用 <cite>USBD_IRQHandler</cite>,并传入 <cite>busid</cite></p></li>
 <li><p>调用 <cite>usbd_initialize</cite> 并填入 <cite>busid</cite> 和 USB IP 的 <cite>reg base</cite>, <cite>busid</cite> 从 0 开始,不能超过 <cite>CONFIG_USBDEV_MAX_BUS</cite></p></li>
 <li><p>使用 <cite>scons –target=mdk5</cite> 或者 <cite>scons</cite> 进行编译,如果是mdk,需要使用 AC6 编译器</p></li>
+<li><p>如果芯片带 cache,cache 修改参考 <a class="reference internal" href="transplant.html#usb-cache"><span class="std std-ref">cache 配置修改</span></a> 章节</p></li>
 </ul>
 </section>
 <section id="id2">
@@ -226,37 +227,9 @@
 <li><p>在 USB 中断函数中调用 <cite>USBH_IRQHandler</cite>,并传入 <cite>busid</cite></p></li>
 <li><p>调用 <cite>usbh_initialize</cite> 并填入 <cite>busid</cite> 和 USB IP 的 <cite>reg base</cite>, <cite>busid</cite> 从 0 开始,不能超过 <cite>CONFIG_USBHOST_MAX_BUS</cite></p></li>
 <li><p>使用 <cite>scons –target=mdk5</cite> 或者 <cite>scons</cite> 进行编译,如果是mdk,需要使用 AC6 编译器</p></li>
-<li><p>如果使用的是 GCC ,需要在链接脚本(需要放在 flash 位置)中添加如下代码:</p></li>
+<li><p>链接脚本修改参考 <a class="reference internal" href="transplant.html#usbh-link-script"><span class="std std-ref">主机链接脚本修改</span></a> 章节</p></li>
+<li><p>如果芯片带 cache,cache 修改参考 <a class="reference internal" href="transplant.html#usb-cache"><span class="std std-ref">cache 配置修改</span></a> 章节</p></li>
 </ul>
-<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/* section information for usbh class */</span>
-<span class="p">.</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ALIGN</span><span class="p">(</span><span class="mi">4</span><span class="p">);</span>
-<span class="n">__usbh_class_info_start__</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">.;</span>
-<span class="n">KEEP</span><span class="p">(</span><span class="o">*</span><span class="p">(.</span><span class="n">usbh_class_info</span><span class="p">))</span>
-<span class="n">__usbh_class_info_end__</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">.;</span>
-</pre></div>
-</div>
-<p>举例如下:</p>
-<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cm">/* The program code and other data into &quot;FLASH&quot; Rom type memory */</span>
-<span class="p">.</span><span class="n">text</span><span class="w"> </span><span class="o">:</span>
-<span class="p">{</span>
-<span class="p">.</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ALIGN</span><span class="p">(</span><span class="mi">4</span><span class="p">);</span>
-<span class="o">*</span><span class="p">(.</span><span class="n">text</span><span class="p">)</span><span class="w">           </span><span class="cm">/* .text sections (code) */</span>
-<span class="o">*</span><span class="p">(.</span><span class="n">text</span><span class="o">*</span><span class="p">)</span><span class="w">          </span><span class="cm">/* .text* sections (code) */</span>
-<span class="o">*</span><span class="p">(.</span><span class="n">glue_7</span><span class="p">)</span><span class="w">         </span><span class="cm">/* glue arm to thumb code */</span>
-<span class="o">*</span><span class="p">(.</span><span class="n">glue_7t</span><span class="p">)</span><span class="w">        </span><span class="cm">/* glue thumb to arm code */</span>
-<span class="o">*</span><span class="p">(.</span><span class="n">eh_frame</span><span class="p">)</span>
-
-<span class="n">KEEP</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="p">(.</span><span class="n">init</span><span class="p">))</span>
-<span class="n">KEEP</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="p">(.</span><span class="n">fini</span><span class="p">))</span>
-<span class="p">.</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ALIGN</span><span class="p">(</span><span class="mi">4</span><span class="p">);</span>
-<span class="n">__usbh_class_info_start__</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">.;</span>
-<span class="n">KEEP</span><span class="p">(</span><span class="o">*</span><span class="p">(.</span><span class="n">usbh_class_info</span><span class="p">))</span>
-<span class="n">__usbh_class_info_end__</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">.;</span>
-<span class="p">.</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ALIGN</span><span class="p">(</span><span class="mi">4</span><span class="p">);</span>
-<span class="n">_etext</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">.;</span><span class="w">        </span><span class="cm">/* define a global symbols at end of code */</span>
-<span class="p">}</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="n">FLASH</span>
-</pre></div>
-</div>
 </section>
 </section>
 

+ 19 - 9
quick_start/transplant.html

@@ -49,7 +49,8 @@
 <li class="toctree-l1 current"><a class="current reference internal" href="#">芯片通用移植指南</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="#usb-device">USB Device 移植要点</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#usb-host">USB Host 移植要点</a></li>
-<li class="toctree-l2"><a class="reference internal" href="#cache">带 cache 功能的芯片使用注意</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#usbh-link-script">主机链接脚本修改</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#cache">cache 配置修改</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="rtthread.html">基于 RT-Thread 软件包开发指南</a></li>
@@ -174,6 +175,7 @@
 <li><p>描述符的注册、class的注册、接口的注册、端点中断的注册。不会的参考 demo 下的 template</p></li>
 <li><p>调用 <cite>usbd_initialize</cite> 并填入 <cite>busid</cite> 和 USB IP 的 <cite>reg base</cite>, <cite>busid</cite> 从 0 开始,不能超过 <cite>CONFIG_USBDEV_MAX_BUS</cite></p></li>
 <li><p>在中断函数中调用 <cite>USBD_IRQHandler</cite>,并传入 <cite>busid</cite>, 如果你的 SDK 中中断入口已经存在 <cite>USBD_IRQHandler</cite> ,请更改 USB 协议栈中的名称</p></li>
+<li><p>如果芯片带 cache,cache 修改参考 <a class="reference internal" href="#usb-cache"><span class="std std-ref">cache 配置修改</span></a> 章节</p></li>
 <li><p>编译使用。各个 class 如何使用,参考 demo 下的 template</p></li>
 </ul>
 </section>
@@ -185,7 +187,17 @@
 <li><p>实现 <cite>usb_hc_low_level_init</cite> 函数(该函数主要负责 USB 时钟、引脚、中断的初始化)。该函数可以放在你想要放的任何参与编译的 c 文件中。如何进行 USB 的时钟、引脚、中断等初始化,请自行根据你使用的芯片原厂提供的源码中进行添加。</p></li>
 <li><p>调用 <cite>usbh_initialize</cite> 并填入 <cite>busid</cite> 和 USB IP 的 <cite>reg base</cite>, <cite>busid</cite> 从 0 开始,不能超过 <cite>CONFIG_USBHOST_MAX_BUS</cite></p></li>
 <li><p>在中断函数中调用 <cite>USBH_IRQHandler</cite>,并传入 <cite>busid</cite>, 如果你的 SDK 中中断入口已经存在 <cite>USBH_IRQHandler</cite> ,请更改 USB 协议栈中的名称</p></li>
-<li><p>如果使用的是 GCC ,需要在链接脚本中添加如下代码(需要放在 flash 位置):</p></li>
+<li><p>链接脚本修改参考 <a class="reference internal" href="#usbh-link-script"><span class="std std-ref">主机链接脚本修改</span></a> 章节</p></li>
+<li><p>如果芯片带 cache,cache 修改参考 <a class="reference internal" href="#usb-cache"><span class="std std-ref">cache 配置修改</span></a> 章节</p></li>
+<li><p>编译使用。基础的 cdc + hid + msc 参考 <cite>usb_host.c</cite> 文件,其余参考 <strong>platform</strong> 目录下适配</p></li>
+</ul>
+</section>
+<section id="usbh-link-script">
+<span id="id2"></span><h2>主机链接脚本修改<a class="headerlink" href="#usbh-link-script" title="Link to this heading"></a></h2>
+<p>在使用主机时,如果没有修改链接脚本,会报 <cite>__usbh_class_info_start__</cite> 和 <cite>__usbh_class_info_end__</cite> 未定义的错误。因为主机协议栈需要在链接脚本中添加一个 section 来存储 class 信息。</p>
+<ul class="simple">
+<li><p>如果使用的是 KEIL 无需修改</p></li>
+<li><p>如果使用的是 GCC ,需要在链接脚本中添加如下代码(需要放在 flash 位置,建议放最后):</p></li>
 </ul>
 <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="c1">// 在 ld 文件中添加如下代码</span>
 <span class="p">.</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ALIGN</span><span class="p">(</span><span class="mi">4</span><span class="p">);</span>
@@ -228,17 +240,15 @@
 <span class="n">keep</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">section</span><span class="w"> </span><span class="p">.</span><span class="n">usbh_class_info</span><span class="p">};</span>
 </pre></div>
 </div>
-<ul class="simple">
-<li><p>编译使用。各个 class 如何使用,参考 demo 下的 <cite>usb_host.c</cite> 文件</p></li>
-</ul>
 </section>
 <section id="cache">
-<h2>带 cache 功能的芯片使用注意<a class="headerlink" href="#cache" title="Link to this heading"></a></h2>
-<p>协议栈以及 port 中不会对 cache 区域的 ram 进行 clean 或者 invalid,所以需要使用一块非 cache 区域的 ram 来维护。 <cite>USB_NOCACHE_RAM_SECTION</cite> 宏表示将变量指定到非 cache ram上,
-因此,用户需要在对应的链接脚本中添加 no cache ram 的 section。默认 <cite>USB_NOCACHE_RAM_SECTION</cite> 定义为  <cite>__attribute__((section(“.noncacheable”)))</cite>。</p>
+<span id="usb-cache"></span><h2>cache 配置修改<a class="headerlink" href="#cache" title="Link to this heading"></a></h2>
+<p>对于带 cache 的芯片,协议栈以及 port 中不会对 cache 区域的 ram 进行 clean 或者 invalid,所以需要使用一块非 cache 区域的 ram 来维护。
+<cite>USB_NOCACHE_RAM_SECTION</cite> 宏表示将变量指定到非 cache ram上,默认 <cite>USB_NOCACHE_RAM_SECTION</cite> 定义为  <cite>__attribute__((section(“.noncacheable”)))</cite>。
+因此,用户需要在对应的链接脚本中添加 no cache ram 的 section,并且 section 段包含 <cite>.noncacheable</cite>。</p>
 <div class="admonition note">
 <p class="admonition-title">Note</p>
-<p>需要注意,光指定 section 是不够的,还需要配置该 section 中的 ram 是真的 nocache,一般需要配置 mpu 属性(arm 的参考 stm32h7 demo)。</p>
+<p>需要注意,光修改链接脚本中的 nocache section 是不够的,还需要配置该 section 中的 ram 是真的 nocache,一般需要配置 mpu 属性(arm 的参考 stm32h7 demo)。</p>
 </div>
 <p>GCC:</p>
 <div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">MEMORY</span>

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
searchindex.js


Деякі файли не було показано, через те що забагато файлів було змінено