圈圈.代码现象_第3章

1、3.10节

  (1)、疑问

    和我的代码现象不同之处:

    (A)、Pdf.P114  “从图中...,程序返回了9字节的配置描述符,其中 0x22 0x00 表示描述符结合的总长度为 34字节。”(ZC: 这里的“结合” 应该是“集合”吧?)

      这里我的代码中是 返回的34字节的数据,为啥会有此不同之处?可能是 此时 书上的 ConfigurationDescriptor 还没有 我代码中的详细(我的代码使用的是 第3章 最终状态的信息),尝试一下 看看结果如何 。

      我对比了一下 PDF中和代码中的 ConfigurationDescriptor[?],它的长度和内容 一模一样,观察到 ReportDescriptor[?]的内容和长度不同,是这个原因? 貌似不太像,只有ConfigurationDescriptor[?]里用到 其它地方也没有用到 ReportDescriptor[?]。往主机传的 配置描述符集合 的长度 是 sizeof(ConfigurationDescriptor),ReportDescriptor[?]里面有没有信息貌似 无关紧要...

    (B)、Pdf.P114  我的代码输出的信息 比 图3.10.1 中多,在"字符串描述符"之后 还有很多的信息的

  (2)、串口 输出:

********************************************************************
******             《圈圈教你玩USB》之 USB鼠标                ******
******                      AT89S52 CPU                       ******
******                  建立日期:Mar 26 2018                 ******
******                   建立时间:14:28:41                   ******
******                    作者:电脑圈圈                      ******
******                    欢迎访问作者的                      ******
******           USB专区:http://group.ednchina.com/93/       ******
******      BLOG1:http://www.ednchina.com/blog/computer00    ******
******                BLOG2:http://computer00.21ic.org       ******
******                  请按K1-K8分别进行测试                 ******
******    K1:光标左移  K2:光标右移  K3:光标上移 K4:光标下移   ******
******    K5:滚轮下滚  K6:滚轮上滚  K7:鼠标左键 K8:鼠标壹?  ******
********************************************************************
Your D12 chip's ID is: 0x1012. ID is correct! Congratulations!

断开USB连接。								  <== <== <== ZC: 打印完这条信息之后,等待一会
连接USB。
USB总线复位。
USB总线挂起。
USB总线挂起。
USB总线复位。
USB总线挂起。
USB总线挂起。
USB总线复位。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x0040
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB总线复位。
USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x0000
USB标准输出请求:设置地址。地址为:0x01 
写端点0缓冲区0字节。
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x0012
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB说?输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0xFF 0x00 
			 ZC: 接收?g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x00FF
USB标准输入请求:获取描述符——配置描述符。
			 ZC: 配置描述符 : 发送的总长度(g_SendLength) --> 0x0022, sizeof(ConfigurationDescriptor) --> 0x0022
写端点0缓冲区16字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32 0x09 0x04 0x00 0x00 0x01 0x03 0x01 
USB端点0输入中断。
写端点0缓冲区16字节。
0x02 0x00 0x09 0x21 0x10 0x01 0x21 0x01 0x22 0x34 0x00 0x07 0x05 0x81 0x03 0x10 
USB端点0输入中断。
写端点0缓冲区2字节。
0x00 0x0A 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x03 0x03 0x09 0x04 0xFF 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x00FF
USB标准输入请求:获取描述符——字符串描述符 zzz					<== <== <== ZC: 打印完这条信息之后,等待一会
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x03 0x00 0x00 0xFF 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x00FF
USB标准输入请求:获取描述符——字符串描述符 zzz					<== <== <== ZC: 打印完这条信息之后,等待一会
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x0012
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x09 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x0009
USB标准输入请求:获取描述符——配置描述符。
			 ZC: 配置描述符 : 发送的总长度(g_SendLength) --> 0x0022, sizeof(ConfigurationDescriptor) --> 0x0022
写端点0缓冲区9字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x22 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x0022
USB标准输入请求:获取描述符——配置描述符。
			 ZC: 配置描述符 : 发送的总长度(g_SendLength) --> 0x0022, sizeof(ConfigurationDescriptor) --> 0x0022
写端点0缓冲区16字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32 0x09 0x04 0x00 0x00 0x01 0x03 0x01 
USB说?输入中断。
写端点0缓冲区16字节。
0x02 0x00 0x09 0x21 0x10 0x01 0x21 0x01 0x22 0x34 0x00 0x07 0x05 0x81 0x03 0x10 
USB端点0输入中断。
写端点0缓冲区2字节。
0x00 0x0A 
USB端点0输胫卸稀?
USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x09 0x01 0x00 0x00 0x00 0x00 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
			 ZC: 请求长度(g_bmRequestType -> D6 和 D7):: 0x0000
USB标准输出请求:设置配置。							<== <== <== ZC: 打印完这条信息之后,等待较长时间(20分钟以上),然后才打印出下面的语句
USB总线挂起。								<== <== <== ZC: 貌似 隔较长的时间,又打印了下面的语句
USB总线挂起。

 

 

1、3.7节

  1.2、输出:

********************************************************************
******             《圈圈教你玩USB》之 USB鼠标                ******
******                      AT89S52 CPU                       ******
******                  建立日期:Mar 23 2018                 ******
******                   建立时间:14:14:22                   ******
******                    作者:电脑圈圈                      ******
******                    欢迎访问作者的                      ******
******           USB专区:http://group.ednchina.com/93/       ******
******      BLOG1:http://www.ednchina.com/blog/computer00    ******
******                BLOG2:http://computer00.21ic.org       ******
******                  请按K1-K8分别进行测试                 ******
******    K1:光标左移  K2:光标右移  K3:光标上移 K4:光标下移   ******
******    K5:滚轮下滚  K6:滚轮上滚  K7:鼠标左键 K8:鼠标右键   ******
********************************************************************
Your D12 chip's ID is: 0x1012. ID is correct! Congratulations!

断开USB连接。
连接USB。
USB总线复位。
USB总线挂起。
USB总线挂起。
USB总线复位。
USB总线挂起。
USB总线挂起。
USB总线复位。			<== <== <== <== <== <==
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB总线复位。			<== <== <== <== <== <==
USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
USB标准输出请求:设置地址。地址为:0x01 
				<== ZC: 在这里,等待了一会,才继续有下面的信息输出
USB总线复位。			<== <== <== <== <== <==
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB总线复位。			<== <== <== <== <== <==
USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
USB标准输出请求:设置地址。地址为:0x01 
				<== ZC: 在这里,等待了一会,才继续有下面的信息输出
USB总线复位。			<== <== <== <== <== <==
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB总线复位。			<== <== <== <== <== <==
USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
USB标准输出请求:设置地址。地址为:0x01 
				<== ZC: 在这里,等待了一会,才继续有下面的信息输出
USB总线复位。			<== <== <== <== <== <==
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB总线复位。			<== <== <== <== <== <==
USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x05 0x01 0x00 0x00 0x00 0x00 0x00 
			 ZC: 接收者(g_bmRequestType -> D4~D0)::0x00 
			 ZC:     0:设备; 1:接口; 2:端点; 3:其他; 4~31:保留 ***
USB标准输出请求:设置地址。地址为:0x01 
				<== ZC: 在这里,等待了一会,才继续有下面的信息输出
USB总线挂起。			<== <== <== <== <== <==

 

 

1、3.3节

  1.1、经测试,函数UsbEp0Out(...) 中如果 不加语句"D12ReadEndpointLastStatus(0);"则会一直输出"USB端点0输出中断。"(无限输出,原因看Pdf.P79中3.3节的讲解)

    (1)、D12ReadEndpointLastStatus(0) 的参数 "0",应该就是对应 “端点0输出”

    (2)、READ_INTERRUPT_REGISTER 之后 读出的2个字节的内容 应该就是 中断寄存器中2个字节的 值的Copy。

    (3)、Read Last Transaction Status(函数 D12ReadEndpointLastStatus(...))返回的是 1字节的信息,每一位的含义是什么?代码的注释中有一段话:

      //读取端点0输出最后传输状态,该操作清除中断标志
      //并判断第5位是否为1,如果是,则说明是建立包

      读最后传输状态 命令,只会有 1字节信息 还是说信息是>=1字节的,只是我们只需要其中第1字节的信息?(答:只有1字节)

      解答:详见 3.4节

    (4)、

      读取端点最后状态的命令:D12WriteCommand(0x40+Endp);

      选择端点的命令:D12WriteCommand(0x00+Endp);

      这里的 Endp,对应 中断寄存器第1字节的结构

  1.2、输出:

    

 

 

 

 

10、

光盘中原来的代码编译后的现象:

********************************************************************
******             《圈圈教你玩USB》之 USB鼠标                ******
******                      AT89S52 CPU                       ******
******                  建立日期:Mar 17 2018                 ******
******                   建立时间:14:57:06                   ******
******                    作者:电脑圈圈                      ******
******                    欢迎访问作者的                      ******
******           USB专区:http://group.ednchina.com/93/       ******
******      BLOG1:http://www.ednchina.com/blog/computer00    ******
******                BLOG2:http://computer00.21ic.org       ******
******                  请按K1-K8分别进行测试                 ******
******    K1:光标左移  K2:光标右移  K3:光标上移 K4:光标下移   ******
******    K5:滚轮下滚  K6:滚轮上滚  K7:鼠标左键 K8:鼠标右键   ******
********************************************************************
Your D12 chip's ID is: 0x1012. ID is correct! Congratulations!

断开USB连接。
连接USB。
USB总线复位。
USB总线挂起。
USB总线挂起。
USB总线复位。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00 
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB总线复位。
USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x05 0x03 0x00 0x00 0x00 0x00 0x00 
USB标准输出请求:设置地址。地址为:0x03 
写端点0缓冲区0字节。
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00 
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0xFF 0x00 
USB标准输入请求:获取描述符——配置描述符。
写端点0缓冲区16字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32 0x09 0x04 0x00 0x00 0x01 0x03 0x01 
USB端点0输入中断。
写端点0缓冲区16字节。
0x02 0x00 0x09 0x21 0x10 0x01 0x21 0x01 0x22 0x34 0x00 0x07 0x05 0x81 0x03 0x10 
USB端点0输入中断。
写端点0缓冲区2字节。
0x00 0x0A 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x03 0x03 0x09 0x04 0xFF 0x00 
USB标准输入请求:获取描述符——字符串描述符(产品序列号)。
写端点0缓冲区16字节。
0x16 0x03 0x32 0x00 0x30 0x00 0x30 0x00 0x38 0x00 0x2D 0x00 0x30 0x00 0x37 0x00 
USB端点0输入中断。
写端点0缓冲区6字节。
0x2D 0x00 0x30 0x00 0x37 0x00 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x03 0x00 0x00 0xFF 0x00 
USB标准输入请求:获取描述符——字符串描述符(语言ID)。
写端点0缓冲区4字节。
0x04 0x03 0x09 0x04 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x02 0x03 0x09 0x04 0xFF 0x00 
USB标准输入请求:获取描述符——字符串描述符(产品描述)。
写端点0缓冲区16字节。
0x22 0x03 0x0A 0x30 0x08 0x57 0x08 0x57 0x59 0x65 0x60 0x4F 0xA9 0x73 0x55 0x00 
USB端点0输入中断。
写端点0缓冲区16字节。
0x53 0x00 0x42 0x00 0x0B 0x30 0x4B 0x4E 0x55 0x00 0x53 0x00 0x42 0x00 0x20 0x9F 
USB端点0输入中断。
写端点0缓冲区2字节。
0x07 0x68 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x01 0x00 0x00 0x12 0x00 
USB标准输入请求:获取描述符——设备描述符。
写端点0缓冲区16字节。
0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x10 0x88 0x88 0x01 0x00 0x00 0x01 0x01 0x02 
USB端点0输入中断。
写端点0缓冲区2字节。
0x03 0x01 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x09 0x00 
USB标准输入请求:获取描述符——配置描述符。
写端点0缓冲区9字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x80 0x06 0x00 0x02 0x00 0x00 0x22 0x00 
USB标准输入请求:获取描述符——配置描述符。
写端点0缓冲区16字节。
0x09 0x02 0x22 0x00 0x01 0x01 0x00 0x80 0x32 0x09 0x04 0x00 0x00 0x01 0x03 0x01 
USB端点0输入中断。
写端点0缓冲区16字节。
0x02 0x00 0x09 0x21 0x10 0x01 0x21 0x01 0x22 0x34 0x00 0x07 0x05 0x81 0x03 0x10 
USB端点0输入中断。
写端点0缓冲区2字节。
0x00 0x0A 
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x00 0x09 0x01 0x00 0x00 0x00 0x00 0x00 
USB标准输出请求:设置配置。
写端点0缓冲区0字节。
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x21 0x0A 0x00 0x00 0x00 0x00 0x00 0x00 
USB类输出请求:设置空闲。
写端点0缓冲区0字节。
USB端点0输入中断。
USB端点0输出中断。
读端点0缓冲区8字节。
0x81 0x06 0x00 0x22 0x00 0x00 0x74 0x00 
USB标准输入请求:获取描述符——报告描述符。
写端点0缓冲区16字节。
0x05 0x01 0x09 0x02 0xA1 0x01 0x09 0x01 0xA1 0x00 0x05 0x09 0x19 0x01 0x29 0x03 
USB端点0输入中断。
写端点0缓冲区16字节。
0x15 0x00 0x25 0x01 0x95 0x03 0x75 0x01 0x81 0x02 0x95 0x01 0x75 0x05 0x81 0x03 
USB端点0输入中断。
写端点0缓冲区16字节。
0x05 0x01 0x09 0x30 0x09 0x31 0x09 0x38 0x15 0x81 0x25 0x7F 0x75 0x08 0x95 0x03 
USB端点0输入中断。
写端点0缓冲区4字节。
0x81 0x06 0xC0 0xC0 
USB端点0输出中断。
读端点0缓冲区0字节。
USB端点0输入中断。

 

3、

4、

5、

 

posted @ 2018-03-12 15:14  DanPianJi  阅读(167)  评论(0)    收藏  举报