入门必看
==================

首先欢迎大家来到 usb 的世界，在这里你可以学习到 usb 各种知识以及 cherryusb 的移植使用进阶等等。但是呢，刚进来的你，一定很懵懂，因为 USB 很难（其实当你学会了 cherryusb以后，你会发现，USB 一点都不难），
那么这种情况下，你的学习路线，应该是怎么样呢？在这里，我推荐大家是按照我得学习路线来学习，这样对你的 USB 成长是最有帮助的，并且你也不会中途放弃。

首先，不允许上来就看概念，有句古诗说的好， **纸上得来终觉浅，绝知此事要躬行** ，光看纸面上的东西，你是学不到什么的，只有当自己实践了，你才能更深入的了解这些概念。那么作为初学者，你应该怎么做呢？请看以下步骤。


第一步
-------------

你需要学过 C 语言，UART, DMA，这是基础，如果没学过，请去学习，不然你会很吃力。你会问 USB 跟 UART/DMA 有什么关系？ 我只能说两个字， **等价**

第二步
-------------

下载 demo 工程并跑通能运行， **建议学习慢的，使用 demo 同型号芯片**，学习快的，可以选择自己移植相关支持的型号的芯片。你连 demo 都跑不通，你学什么 USB，你说对不对？

第三步
---------

非常好，到这步，说明你已经能熟练移植和跑通所有示例了，那么接下来，你应该学习什么呢？ **事务**， **请求** 和 **描述符**（在 USB 的学习过程中，你只需要知道这三个，其余都不需要知道）。

第四步
----------

首先我们需要知道 USB 事务包含 SETUP/IN/OUT，其实就是等价于发送命令，发送数据和接收数据，很简单。至于下面枚举中你在外面的网络中所听到的控制阶段，数据阶段，状态阶段，他不是事务，他只是用多个事务代表了一个阶段而已。

第五步
----------

然后你再去看 **USB 枚举** 章节并且知道了一个概念： **描述符** ，这个时候，你就可以去简单看看什么是描述符，有哪些描述符，然后你需要记住， **设备、配置、接口、端点描述符的组成**，并背下来，其余的你都不需要知道，因为其他都是固定的，后续都是 CV 。群文件有各类设备枚举的抓包，可以下下来看看。

第六步
----------

然后呢，你可以再去看看什么是 **请求** ，请求结构体的组成，看看有哪些请求，简单了解即可，为什么呢？因为它不过就是 8 字节的数据格式，大家都会写一个 UART + 自定义协议，那么 USB 的请求也是一样的，只不过是规定好了而已。

第七步
----------

这个时候，你该去熟悉下协议栈的一些 API 了，参考 **API 手册** 章节。并且你需要知道中断完成的条件是什么，什么时候算接收完成，什么时候算发送完成，可以参考 **USB 知识点拓展** 章节。

第八步
----------

到这步呢，你肯定已经非常懂了，然后就可以开始你的一些小功能小项目了，在此期间呢，请循环查看 **USB 知识点拓展** 章节，直到你真的理解了，因为这些内容是非常重要的，会影响我们代码的执行结果。

第九步
----------

都到这步了，你应该不需要我了，这个时候，你可以去看看 USB 概念，看看 USB 的一些细节，看看 CherryUSB 的代码流程了。然后就是巩固巩固再巩固了。恭喜你，出师了！！！