Qca9563
平台: qca956x +ap152
1. Flash 地址问题
原板设计为16M nor flash, 后期改为32M flash, 出现不能访问后16M flash空间,从原理来看,访问16M及大于16M flash 空间,只有一个地址命令的区别, 发送三地址命令或者四地址命令。
首先排除的是:发送命令的原因,即驱动发送的读写命令正确
第二,用正确的读写命令,操作后16Mflash 空间。 结果不成功。
后来内存映射才发现高通CPU对spi NorFlash的特殊的读取优化,优化的空间长度为16M,所以用标准的spi 读取命令会失败。
从映射图中可以,flash仅可以映射16M。
通常,访问SPI Nor Flash都是基于SPI总线接口,串行读取。但是高通的CPU对此做了一个硬件优化,可以将16MB及以下的Flash地址空间映射到一个内存空间直接访问(对于这些MIPS内核的高通CPU,该段空间属于kseg1区域),这样当要读取这些flash上的内容时,代码可以采用memcpy模式,很好的提升了读取速度。
这种方式虽然可以提升flash读取的速度,缺点是可以访问16M 以下flash空间,所以对于16M 以上的flash, 就需要disable 这种确件优化,使用通用spi 总线去操作Nor flash.
以使可以灵活操作16M flash以的空间。
修改为标准spi mode
1.如果没有设备树的情况,最简单的方式,在驱动probe的时候,将is_flash 赋值为 0
2. 如果有设备树的情况下,注释掉 is-flash这行,即切换为spi标准模式
2. USB 时钟问题
由于在项目中遇到usb不通的问题,奇怪的是在evt在没有问题,但在dvt上有问题,看起来是一个离奇的问题。
在驱动上debug,得到结果是usb controler收不到任何数据,接着下一步开始debug时钟,当前使用的ehci,usb2.0,最高速度480Mbit/s,所认让usb controler进入test mode,用仪器测试时钟,发现时钟高达500多M,于是重点找时钟问题。
开始查register
USB_REFCLK_FREQ_SEL: 0x2 25MHZ
USB_REFCLK_FREQ_SEL: 0x5 50MHZ
最终发现reset之后用的0x5, 而我们当前所用的外部时钟为25MHZ。呵呵哒