圈圈.学习进度_笔记

ZC:(20180930)书P91,PDF(104 / 416)  [ 3.7节 结束,下一页 就是 3.8节 ]

ZC:(20180831)PDF.297 / 416

 

ZC:今天发现(20180912),程序的代码段如果太大了的话(代码多,编译出来的代码段就大),Keil 就会出现 链接不成功的情况。具体看下来,代码段 大小 超过 8200 就不行了,测试的项目是 UsbMouse__ZC__Code8200。

 

1、20181010

  PDF.P123/416 书.P110、PDF.P129/416 书.P116 讲到这里 3.13节,本章中只用到了3个 端点:端点0输入、端点0输出、端点1输入,各个端点 各有分工?具体都是负责干什么的?

  PDF.P123/416 书.P110 请求是 发送到 接口的。请求 发送到 接口、设备 到底是什么意思,有什么区别 ??

 

1、20180917:

  PDF.P87(书P76),书中这样说:“...,从bmRequestType的第7位可以看出,它是请求数据输入的。”  我的分析:请求的方向是“设备到主机” & 说是“请求数据输入”,可以感觉到  貌似 本书中 提及的 “输入”/“输出” 都是  从“主机”的角度出发的。

    包括 提及的 "输入缓冲区"/"输出缓冲区" 貌似都不是 USB芯片模块的 输入输出缓冲区,而是 PC的USB总线控制器的。然而 从代码来看 应该是  USB芯片模块的输入输出缓冲区,∴ 这里一直感觉是 反着的,很难受...

    难道是这样理解??:输入输出缓冲区 是 PC的USB总线控制器的,USB芯片模块 并没有 输入输出缓冲区,USB芯片模块 只是在 接收到相应的中断(或者别的种类的信号后)去操作输入输出缓冲区 而已... (真实的情况是这样子的吗???)

 1.1、PDF.P103(书P90),这里 最后一段的文字解说,不太明白... (关于 端点0输入中断 和 下一个SETUP包 的)

  不解的地方:

   剩余部分 发送完毕之后 不会有 端点0输入中断 产生吗?

   “D12 在收到下一个SETUP包之后,会自动将端点0输入缓冲的数据置为无效,” 这里我明白的,但是 “也就说是第二次加进去的数据实际上并没有起作用。”是什么意思?什么叫“并没起作用”?“第二次加进去的数据” 主机实际上是不需要的?不会吧...  “实际上并没有起作用”作者想表达的意思是 没有产生 端点0输入中断 也是没关系的?

   看代码中,端点0输入中断 的处理函数是 UsbEp0In(void),所做的工作就是 清楚中断标志+发送未发完的数据,难道 确实是 “第二次加进去的数据” 不会产生 端点0输入中断 ?这个 需要在 后面通过代码来看一下...待测试。

 

 

 

1、20180309:

  Pdf.P124  ZC:(1)删减代码,形成3.3节的代码,(2)修改代码:(A)清中断标志 (B)不清中断标志 看看它们的现象区别 (ZC:main(...)里面的 while循环中没有延时函数,应该会 非常快速的打印出 不清中断标志的中断信息*N。)

  Pdf.P98(书P85)

2、第2章

  2.1、书P43(56 / 416),编译:

      

 

3、第3章

  (1)、3.3节 的代码中,没有加入 断开/连接USB的代码,导致 "串口调试助手"没有信息显示,也没有 气泡"无法识别的USB设备" 出现。

   (2)、3.4中,疑问:"读取从主机发送到端点0的数据",消息发送过来-->硬件接收到消息-->硬件中断-->如果没有及时的处理,会不会 主机又发新的数据?会不会像TCP一样 以为上次的数据丢失了 而重发上一次的数据?如果 主机又发来了数据(不管是重发还是发来新的数据),此时 上次被调用的中断函数还没有退出,会不会引发新的中断(再次调用中断函数)?

    同一时间点 一个中断有多个中断例程在执行的话 肯定是不行的(估计是使用 打开/关闭 中断的方式来人为的控制 [ 应该是 D12ClrRd() 和 D12SetRd() ])。

  (3)、Pdf.P81(书P68) 中说的 数据格式,只是 XP发来的是这样,还是 我们就应该按照这个格式来通讯?

    ZC:第一个字节保留;第二个字节 接收到数据的字节数;第三个字节开始 真正的USB数据

    读到的字节数 会不会 超过 传入的形参Len?

  (4)、Pdf.P82(书P69) "//这里不直接调用读1字节的函数,而直接在这里模拟时序,可以节省时间",这句话 类似的话,在前面的章节/代码注释(where?)中也出现过,这里哪里“模拟时序”了?为什么这样“节省时间”?

    ZC:难道 “模拟时序”,指的是 "D12ClrRd();"和"D12SetRd();"?? 不会吧??...(ZC: (20180322)肯定不是说的这个)

    ZC:(20180322) 应该说的只是点 和 PDIUSBD12的时序图 有关,具体 不懂,以后再说...

    Pdf.P96(书P.83) 发送数据的函数中 也有这样的注释

  (5)、3.3节(Pdf.P79) 说到,现在的 中断处理方式是无限循环方式 而非 中断方式,尝试将 中断的处理方式 改成 中断方式 不要使用无限循环的方式

    ZC:改成 中断方式 的话,main(...)里面的 无限循环while 怎么处理?依旧需要保留?不保留的话,main(...)就会退出 程序就结束了?还是别的什么结果?第2章代码main(...)里面也有一个无限循环。

  (6)、ZC:居然是这样的,和我理解的不一样...:

    输出中断 --> 主机有数据传输到板子

    输入中断 --> 成功将数据发送到主机

  (7)、Pdf.P77 注意这里,中断模式 是 正确传输才产生中断(成功发送出数据或者成功接收到数据才产生中断)。

    "端点配置选择为模式0,即端点1和2都为普通端点,因为这里不需要使用等时传输。" ZC:"等时传输" 是啥?

  (8)、Pdf.P78 这里的延时函数 实现的原理 居然是 使用循环来消耗CPU的时间。

    ZC:从main(...)函数 和 这里的DelayXms(...)函数 可以看出,本单片机 从开机开始 MCU都是100%的使用率在工作 直到关机?(即使 它什么都不做,main(...)中的死循环依旧会100%的使用MCU)

    ZC:没有像OS那样的sleep(...)函数?∵是单任务的模式?OS底层的 任务调度 应该也不是不停歇的循环吧?这样CPU的使用率不是会很高?即使在所有进程都不忙的情况下,OS底层也是在无间隙无休止的循环调用所有进程?

  (9)、Pdf.P80 从打印的信息和作者的讲解看出,"USB总线挂起"和"USB总线复位" 貌似应该这样理解:主机对设备进行挂起和复位操作(ZC:貌似不是通过发送数据来操作的,∵后面才收到数据的,难道是直接的 指令操作?就像烧录的程序操作板子的方式一样?51单片机的特性?)

  (10)、Pdf.P84 试试看NAK是什么样子的

  (11)、Pdf.P86 "D12 一直在回答NAK,即没有数据准备好",如何能观察到这个 NAK?这是个什么样子的数据结构 什么样子的信息?

    Pdf.P87/P88 过程:

     { 主机发送8字节数据-->主机等待(这段时间主机一直在请求输入)--> 程序没有返回数据,∴D12一直在回答NAK(即没有数据准备好)--> 主机等待了一段时间后发送一次总线复位 } * 3次 -->  三次都失败了,(主机)没有读到数据,主机只好很无奈的放弃了操作。这是该USB端口上不再有数据活动,从而D12进入了挂起状态

      ZC:"主机一直在请求输入",∴ 板子里的程序称为 输入中断?这样理解?

      ZC:"D12进入了挂起状态",是D12自己进入挂起?还是主机让D12挂起?按照 数据传输的那个理解套路的话,应该是这样的过程:主机让D12挂起-->D12变为挂起状态-->D12挂起中断发生

  (12)、老是提到的 "USB总线复位" / "USB总线挂起",这个“USB总线” 到底是指什么,是指 主机中的USB总线,还是指 整个USB板子? "复位" 和 "挂起" 又是指 什么样的动作,"复位" 是指 重置,"挂起"是指 不工作并等待命令?这些是哪里的术语名词,51单片机里面的吗?

  (13)、Pdf.P104 设备描述符 总长 18字节,D12的端点0的输入缓冲区长度是16字节(不知道 是否 输入缓冲区就是输出缓冲区?或者 两者长度一样?),∴ 在发送了16字节之后,在 输入中断中 将剩余的2字节数据再次发送出去了

  (14)、Pdf.P105 主机发给设备的 ACK应答 又是什么样子的东西?

  (15)、Pdf.P106 这里提到的 "0x04"是图3.7.1中的信息。图3.8.1 中 在设置了新的地址之后,"获取描述符——设备描述符" 和 "获取描述符——配置描述符"  的后面 怎么没有 "USB总线复位"的信息 打印出来了?? 

    Pdf.P106 这里也有一段关于 复位总线 的话:"说明设置地址操作已经成功了,∵主机已经使用新的地址来发送请求了,若不成功 主机会检测到超时从而复位总线",这里是复位哪里的总线?主机里面的?还是 主机通过 USB端口来操作D12 复位了D12里面的总线?

  (16)、Pdf.P106 "这次获取设备描述符将会完整的获取" 什么意思?这次和第一次获取有什么不同?第一次获取 为啥是不完整的?

  (17)、Pdf.P115 (http://computer00.21ic.org/user1/2198/archives/2007/42769.html)貌似失效了(20180320),baidu搜"圈圈 java 字符串描述符" 也没有搜到...

  (18)、Pdf.P76 D12设置模式命令 D12内部上拉电阻断开 模拟USB拔下动作

  (19)、Pdf.P79 3.3节 第一段文字,说明:USB总线复位 是指 D12芯片里面的操作,D12里面有CPU,USB总线复位 之后 会产生中断  那主机是如何通知D12 让它去做复位操作的呢?直接向对应的USB端口写命令?

  (20)、Pdf.P84-85 3.4节 这里的讲解 给我印象最深的就是:一些操作(这一节主要是 D12WriteCommand、D12ReadByte、发送D12_ACKNOWLEDGE_SETUP、D12ClearBuffer(实际上也是调用D12WriteCommand)) 必须注意选择好对应的端口,不能搞乱掉。

  (21)、Pdf.P95  3.7节,“在主机下一次发送 IN 令牌后,D12 将会自动将端点0 输入缓冲区中数据返回给主机,这样就实现了获取设备描述符的请求。”  这里看出,主机和设备之间 还有 令牌 这种东西在传递 那就肯定可以通过它来通信和控制了。

  (22)、Pdf.P95 这里讲到 “写入的数据第一个字节必须为0,第二个字节为需要发送的数据的长度。后面写入的才是真正需要发送的数据。”  联想到,前面 读取数据的时候,有这样的规定:第一个字节无效,第二个字节是数据的长度,后面是真正的数据。这样的结构是 USB协议规定的吗?

    貌似 函数D12WriteEndpointBuffer(...) 没有管发送数据的长度,能可以发送随意长度的数据?

    Pdf.P103 发不完的,在中断处理中 继续发,直到发完

  (23)、Pdf.P97  理解代码中 变量NeedZeroPacket(g_NeedZeroPacket)的含义

    ZC:个人理解:PDIUSBD12的端点0(的缓冲区的)大小为16字节,这个值存放在 DeviceDescriptor[7] 中,g_Buffer的长度也是 16字节,是∵D12就是这几成这样的?还是 作者自己规定的?我感觉应该是前者。 

    ZC:在设备发送数据的时候,当最后一条数据的长度正好等于16时,主机无法判断后面是否还会有数据,于是需要发送一个0长度的数据包 用以表示数据发送结束了。在 输入中断 调用 函数UsbEp0SendData(...)时 会判断  NeedZeroPacket(g_NeedZeroPacket)是否为1,为1则发送 0长度的数据包 用以表示数据发送结束了。

  (24)、Pdf.P98  说还要对 接收者进行散转。接收者在 bmRequestType 的 D4~D0 位中定义。我在 3.7节 的代码中添加打印接收者的语句。

    Pdf.P88  3.5.1节 表3.5.1,接收者的讲解

  (25)、Pdf.P103  本页最后一段话 不是很明白:“前面提到过,主机第一次获取设备描述符时,只会读一个数据包的设备描述符,...。这会不会有问题呢?...。因为在 D12 在收到下一个 SETUP包之后,会自动关机将端点 0 输入缓冲区的数据置为无效,也就是说第二次加进去的数据实际上并没有起到作用。...”

    ZC:哪来的 下一个“SETUP包”?明明是一个包的后半部分吧?

    ZC:“也就是说第二次加进去的数据实际上并没有起到作用” 后半段数据没有起到作用?扯淡吧?

  (26)、Pdf.P105  具体的过程是这样的么?:主机发送 SET_ADDRESS的请求包--> 设备接收到请求包,设置新的地址(此时新的地址还未被启用),返回 0长度的状态数据包 --> 主机返回ACK应答--> 设备收到ACK应答后 新地址才生效

  (27)、Pdf.P125 “HID 协议以及用途表文档”在哪里?附录吗?光盘中提供的? ZC:我在网上搜到了,是官网上面的:"D:\eBook\WindowsDriver\圈圈教你玩USB\HID_ZC\HID1_11.pdf 和 Hut1_12v2.pdf"

    Pdf.P125 "...官方网站提供的 HID 描述符工具..." 这个工具 貌似没有在官网找到... 在哪里?

  (28)、Pdf.P129  最后面的一段文字中 “在设备复位处理中,...” 说明 "USB总线复位" 应该指的是 设备而非主机

  (29)、Pdf.P126  没注意 代码中的 "中断输入端点 1" 是在哪里?怎么使用的?就是 端点1 吗?

4、

5、第5章

  5.1、书P162(175 / 416),有一句话:“然后编译工程,并下载到学习板中运行,就会发现新硬件。”,这里的 "编译工程"、"下载到学习板" 完全不记得是怎么弄了...还是得将这些东西 整理一下 不然再隔一段时间不弄的话 又会不记得了...

6、

7、

8、

9、

10、

 

posted @ 2018-03-09 09:30  DanPianJi  阅读(193)  评论(0)    收藏  举报