Freescale MPC8309调试

10/09/2011 第一步是连接仿真器。 打开ltib默认的MPC8309配置,修改 DDR大小为128M NOR Flash为8bit OK,连接上仿真器,仿真器居然没有8309的选项,郁闷,下载了8309的补丁包,EPPC_8.8_830X_b101126.exe。安装,可以选择8309了。又在freescale上瞄了一下,CW8.8.5的patch可以支持win7,这是个好消息,因为之前都是在虚拟机用的,贼不方便。安装好patch,在按照说明装好了驱动,又拿8315的板子连了一下,通过。 好的,连上8309,擦写Flash,显示”连接失败”。新建一个8309的工程,点击Debug->connect,显示无法复位CPU或者无法将CPU置于DEBUG模式,看来是CPU没有正常工作。 郁闷了,检查8309配置,复位配置字为1100,没问题;JTAG设计也没问题;复位没问题;晶振也没问题。最后发现PCI_SYNC_IN没有和PCI_SYNC_OUT连接,导致CPU没有时钟。还好PCI_SYNC_IN通过一个下拉电阻引了出来,不然这个板子就废掉了。 将33M时钟飞到PCI_SYNC_IN上,在次连接一下,成功!擦除Flash,成功!校验Flash,不对。到底是没擦除还是校验错呢?还好Flash上Busy信号接了灯,在擦一下,发现灯亮了,所以应该是校验错误。因为8309和8315是一样的,将8309的NOR Flash配置改成与8315一样。校验成功! 接着烧写u-boot,改为NOR Flash启动,串口显示启动信息,但是出现”Error in I2C Direction reg read”,搜索u-boot源码,原来freescale公版会先读一个EEPROM。注释掉。 这次显示了”Not a microcode”,然后就在打印NET:后停掉了。跟踪了代码,发现是在初始化QE的UEC的时候执行初始化TX&RX的时候一直没有等到命令执行完成。会不会和”Not a microcode”有关呢。查看源码发现这个是因为u-boot给QE下载微代码的时候打印的,因为我的u-boot是没有这个微代码的。但是后面程序有设置启动微码指令,注释掉。发现还是这个问题。 10/10/2011 难道是QE输入时钟的问题,我们接的是33M的,6倍频到198M。公版是25M,8倍频到200M。而MII的时钟是25M。 换成25M时钟,修改QE PLL倍频,发现还是一样。 会不会是8309必须需要一个微码呢?google、看QE的手册,没有什么可用的资料。在次检索ltib,突然在tools_8309som下面的nor_flashing目录下面发现一个好东西”iram_mpc8309_r1.bin”。哈哈,找到了。用USB TAP烧写到指定位置。”=>”提示符有了。ping了一下地址。发现没有读到PHY ID。…

Debug SK2000L

给客户做的一款低端板子,其实就是8241+5*DM9000。之前用的Intel的82551太贵了,而且已经停产。市面上其他网络芯片的厂商基本上也没有PCI总线的网络芯片。 板子到手后,5V、3V3、1V8,测量均无短路。 好的,上电电压正常,烧写CPLD,但是串口打印信息并没有按照想象的出现。问题麻烦了。 重新烧了一块FLASH,换了依然没有打印。 看来要动用重武器了。 测量复位、时钟输入、SDRAM时钟均无问题。看来PLL应该发挥作用了。 接着测量Boot Flash的CS,复位后有波形,但是会一直保持。难道是DM9000前面总线驱动的逻辑错了。 审阅了以下CPLD逻辑,果然有错误,改掉后在量CS,发现每次复位后只出现13次。 这个是不应该的,因为前面读u-boot应该会保持一段时间。拿公司另外一块同平台的板子测试印证了我的想法。 然后给郑州的一位同事电话,希望得到一些提示。结果很遗憾,答曰看启动配置。。。。。 这个是Copy的图,应该是不会有问题的。 难道还是CPLD逻辑的问题?我改了以后又用示波器测了一遍,应该没问题的啊。不会是开始烧坏了吧。算了,还是把不用的逻辑禁掉吧。 奇迹出现了,久违的启动信息出来了。看来就是逻辑问题。   接着配置了一路DM9000,probe成功,发送超时,cat /proc/interrupts无中断,量中断管脚是有的。怀疑是发送设置定时器,结果没有中断清除定时器。改回并行中断,ok。在改回去串行中断,ok。估计是'/IRQ1/S_CLK'在拷逻辑的时候忘了加反向。 之后5片DM9000全部找到。   TODO:u-boot下无法配置RCS2,准备飞线将RCS1和RCS2对调。   Added on 08/01/2011 PS: 悲剧,今天测量网卡速度只有30Mbps。

BUG Fixed:中断上下文申请内存

今天客户反应我们的驱动在运行中还是会Oops,奇怪了。因为这个驱动我们之前是在我们自己的一个板子上做的,稳定性之类的已经验证过了,虽然现在的运行环境不是我们自己的版本,既然驱动正常加载,怎么还会出问题呢。 下面的是Oops信息: BUG: scheduling while atomic: swapper/0/0x40010100 Modules linked in: drv Pid: 0, comm:              swapper CPU: 0    Not tainted  (2.6.33.5 #19) PC is at __rcu_process_callbacks+0x68/0x3a0 LR is at __rcu_process_callbacks+0x68/0x3a0 pc…

Solution of GDB issue "Program received signal SIG32, Real-time event 32."

今天客户使用gdb调试程序的时候出现问题。先是“no debugging symbols found",google下发现是因为程序使用strip去掉了debug信息。 然后gdb显示"Program received signal SIG32, Real-time event 32." 继续google后,发现是因为用到的lib库被strip掉了。但是可以使用下面折中的方法: 在dbg prompt后键入"handle SIG32 pass noprint nostop"即可。

CompactFlash Card on MPC8241 using at 8-bits True IDE mode

由于我们公司的一款MPC8241板子存在以下问题 64M DOC空间不够 128M DOC不稳定,文件系统经常损坏 所以我们做了一个DOC转CF的转接卡,由于DOC是8-bits宽度,所以CF卡也只能用8-bits方式。 在CF卡复位后应该使用命令使CF卡工作在8-bits模式,并且不能使用DMA方式。 PS: 这个简单的东西调了整整2天,faint。原因就是第一次调试CF卡的时候写了一个简单的probe程序,当时使用的是16-bits宽度。定义基地址类型的时候使用的是volatile unsigned short *,这次调试的时候没有想起来,结果每次地址加1实际上都是地址加2。导致CF每次读都是在PowerDown模式,把我引进了一个错误的方向。 而对自己的驱动太放心,只是测量了D0是不是正确的,没有测量A0。2天时间都在怀疑时序是不是有问题。 昨天晚上11点终于忍不住量了以下A0,结果发现A0没有变化,A1上出现了波形,最终成功probe到了CF卡。 PS PS: 调试的时候千万不要有侥幸,自己写的代码要考虑清楚,硬件信号该量就要量,不要怕费事麻烦。

开发板无网络如何下载程序

使用console口下载程序,首先确保busybox编译了rx。(minicom的通过X/Y/Zmodem收发也是调用rx)。 然后直接在console运行rx filename,接着在CRT选择Transfer->Send Xmodem,等待正常传输即成。 建议busybox至少编译tar,这样传输多个文件的时候可以打包传输。