调试一个新的WCDMA平台有一个多月了,目前算是可以正常运行了。一路走来,磕磕碰碰,遇到了各种各样的问题,吃一堑长一智,从中也学到了很多东西。
问题一,编译成功,但是通过TRACE32不能下载代码
表现: 在TRACE32上执行tools目录下的mjnand脚本,选择操作菜单“1: Send Partition Table”, 出现错误:
"---- DID NOT COMPLETE Send Partition Table"
"EXITING due to failed command:: Send Partition Table"
调试: 由于用TRACE32烧写代码,首先要把一段代码(jnand.elf)烧到RAM中,然后把控制权交到RAM中的这段程序,之后通过软断点回到TRACE32继续操作。 所以可以先看看RAM中的jnand代码是否正确执行。 打开jnand_param.cmm可以看到jnand的代码存在在RAM中的0x00100000地址,在TRACE32中设置0x100000断点,打开断点可以看到符号表跟汇编代码不一直,所以猜测是RAM的配置错误,导致Jnand的程序错误,当然也就不能接收Trace32的命令。
用于这时的MCP都是空的,所以配置SDRAM都是在setupebi1_20mhz.cmm这个脚本中,根据spec检查脚本中寄存器的配置,发现默认的配置是针对1Gb的SDRAM的,而我们硬件上时256Mb的SDRAM,所以要修改SDRAM row&col size , 从原来的A14~A10改成A13~A9。 修改后就可以正常烧写代码。
问题二,通过TRACE32开始运行,每次都不能跳转到AMSS的入口
表现: 代码烧写完成以后,就可以用TRACE32开始运行,但是发现每次都可以执行到L4的入口地址:0x100000(与jnand的开始地址相同,但是内容已经不一样了),但是不能执行到AMSS的开始地址:0x1e7000。
解决方式: 去掉TRAC32 Break->OnChip Trigger..中的Set下的DABORT,PABORT,UNDEF 3个选项。
由于之前烧写代码都是用tools\mjnand\mjnand.cmm这个脚本,它只是简单的把代码烧到MCP中。所以可以改用build\ms\目录下的mjnload.cmm,它不仅烧写代码,还可以加载全部的符号表,并且去掉TARCE32中的这几个选项。
问题三, 系统运行起来后,设备管理器上找不到口
解决方式:通过检查硬件连接,发现高通VREG_USB默认是由VREG_5V提供的,而我们是直接由VBUS提供的。所以可以在hsu_api_init_phy中修改VREG_USB的提供电压。
问题四, 可以通过AT命令打电话,但是不能拨号上网
表现: 系统也跑起来了,口也找到了,通过超级终端也可以发送AT命令,通过WindowsXP自带的拨号软件可以拨成功(提示"拨号成功,速度115200kpbs"),但实际上打开IE也不能访问网站。
解决方式: 在拨号前,要先发送一条设置AT命令:AT+CGDCONT=1,"IP","3GNET","",0,0