update doc
This commit is contained in:
@@ -6,27 +6,20 @@
|
||||
CherryUSB 使用指南
|
||||
======================================================
|
||||
|
||||
CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统的 USB 主从协议栈。
|
||||
CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统的 USB 主从协议栈。同时 CherryUSB 具有以下优点:
|
||||
|
||||
**小在哪?**
|
||||
- 比较全面的 class 驱动,并且 class 驱动全部模板化,方便自主添加
|
||||
- 协议栈采用链表动态注册的方式,减少内存占用
|
||||
- 树状化编程,方便理清 class 驱动与接口、端点的关系,hub、port、class 之间的关系
|
||||
- 标准化的 porting 接口
|
||||
- 设备协议栈的使用简化到类如 uart 、dma 的使用,主机协议栈的使用简化到文件的使用
|
||||
- 协议栈实现代码简短,并且从上往下看完就能理清 usb 枚举过程和 class 加载机制
|
||||
|
||||
代码中基本不使用全局的数组,使用链表的方式由用户动态的添加。并且基本不占用很大的 ram,flash 的占用也非常小。
|
||||
其他相关链接:
|
||||
|
||||
**美在哪?**
|
||||
|
||||
代码从上到下是逐次递进的过程,不存在什么跳到其他文件,或者顺序倒换的问题,也就是说当你从上往下把代码看完,你也就知道 usb 协议栈是如何工作的了。
|
||||
|
||||
**可移植性高在哪?**
|
||||
|
||||
根据 usb ip 的特点,定义了标准的 dcd 和 hcd 的 porting 接口,只要依次实现,就可以使用 usb 协议栈了。
|
||||
|
||||
最重要的一点,无论从机还是主机协议栈,协议栈只做枚举过程的操作,其余所有应用层操作,协议栈不会做。比如使用从机时,触发了其他端点的 out 中断,那么将直接调用到用户注册的函数中,由用户自己读取,而协议栈并不会使用类似 ringbuffer 的形式读取到一块 buffer上先存着,减少 copy 次数。而类似 msc 和 rndis 这种已经成标准的则由协议栈进行操作。
|
||||
此外,使用从机协议栈过程中你就发现,out 中断就像串口接收中断一样,in 中断就像 dma 完成中断一样。而主机协议栈则是在枚举完成后提供了注册的 **devname** ,用户通过 **devname** 得到收发时需要的句柄,从而进行数据的收发,无需知道收发设备的端点和地址,用户也不想知道这么多信息,太过复杂。
|
||||
|
||||
|
||||
- 从机协议栈视频教程:https://www.bilibili.com/video/BV1Ef4y1t73d
|
||||
- 主机协议栈视频教程:TODO
|
||||
- github :https://github.com/sakumisu/CherryUSB
|
||||
- **从机协议栈视频教程** https://www.bilibili.com/video/BV1Ef4y1t73d
|
||||
- **主机协议栈视频教程** TODO
|
||||
- **github** https://github.com/sakumisu/CherryUSB
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
Reference in New Issue
Block a user