Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37201
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 91
  • 用 户 组: 普通用户
  • 注册时间: 2017-07-20 23:09
个人简介

如果曾经有过汗水里的耕耘,就会在收获的季节不致去懊悔曾经蹉跎的岁月

文章分类

全部博文(9)

文章存档

2017年(9)

我的朋友

分类: LINUX

2017-09-16 15:12:32

  最近调公司一款芯片的USB接口的驱动,USB3.0的控制器,枚举失败,有如下错误打印:

device descriptor read/8, error  -110

即读设备描述符超时,通过USB协议分析仪抓包,发现host没有发出GET_DESCRIPTOR请求,分析怀疑:

1.驱动发出的GET_DESCRIPTOR请求数据不对

2.有cache一致性问题导致host取到的数据不对

通过在驱动中加打印,将GET_DESCRIPTOR请求的Transfer TRB和host收到的Event TRB的数据都打印出来,经过分析GET_DESCRIPTOR请求的Transfer TRB数据没有问题,host也收到了GET_DESCRIPTOR请求的中断和Transfer Event TRB,但Event TRB的Completion Code为0x13,即Context State Error


这时大家都认为是cache一致性的问题导致host读TRB数据不对,用仿真器读取DDR里的数据分析,通过DCBAAP寄存器里的地址找到Device Context,然后找到EP Context 0,得到TR Dequeue Pointer,即EP0的Transfer Ring,DDR里的TRB与驱动打印出来的TRB数据一致,说明数据确实没有问题,那为啥host取数据不对呢?后来发现问题出在host的AXI总线属性配置上,默认配置的memory type为device,而host会发非对齐的burst,导致host取数据不对,改为normal问题解决.

  关于device和normal,在ARMv8的datasheet有相关描述:


阅读(2275) | 评论(0) | 转发(0) |
0

上一篇:MMC驱动之SD卡

下一篇:SD spec摘要

给主人留下些什么吧!~~