复旦微开发过程中遇到的问题总结(一)
一,怎样确定复旦微启动方式?在哪儿查看?
答案:硬件电路配置,具体看mio5-mio3的高低电平设置
二,PS软复位寄存器,先解锁,然后写1到复位寄存器。PS没有任何反应,串口无反应,不能输入输出,感觉死掉了。qspi flash大小是32M
上下电后正常,reworks下面没有reboot软复位,手册里面有这个寄存器,试了后直接没反应了
原因:qspiflash的4字节模式没切回去
三,现象:使用dma收发数据,为解决多核的cache一致性问题,直接从ocm中使用一块内存进行交互,结果开启cache后编译报如下错误
原因:fmql hp总线只能访问ddr,ocm和hp接口线没有连接,双核交互必须使用ddr地址。所以不能使用ocm地址来做dma的接收缓存。单独使用ocm地址交互,还是需要flush和invalid cache。
四,这个vdma配置和xilinx相同,这样配置,为什么中断进不去?自己对比
五,板卡ping电脑 电脑上打开wireshark抓包软件时能ping通 暂停抓包就ping不通。虽然能ping通可能也有数据错误。
原因:wireshark有个混杂模式,可能与这个有关系,注意看看有没有错误,可以delay调试。20号寄存器,控制收发的延时调使能和非使能。
六,复旦微IAR中C语言小数分别取出整数和小数部分,强转监测为什么会non-readable
解决办法:把优化关了
七, IAR 报这个错误:
原因是存储空间分配不够,建议把程序放到DDR上运行,内部sram是不够用的
解决办法:
八,复旦微如何读写16MB以上地址的数据
九,目前我们使用jtag独立模式,可以正常扫描到pl和ps,pl可以正常下载,但是ps无法下载了,具体说使用JTAG独立模式下烧写,会出现下面三个错误:
解决办法:使用Procise烧结。但是如果procise烧结没有成功过不行的话,目前我们使用procise,一直在用另外的flashloader方式。先在线调试helloworld。如果可以在线调试的话,检查PS仿真器的复位引脚接到SRST或者POR_B。如果已经连接到复位了,那就更换一个ARM仿真器就可以。
十,生成的bin文件,在启动的时候找不到main函数,但是调试可以正常运行main函数。
现象:启动的时候,卡在那里起不来。原因:DDR初始化没有屏蔽。修改办法:
如果按上面改了还启动不起来,报一样的错误 :从log看拷贝app把fsbl给覆盖了,fsbl启动挂了。
先检查发现把app放在fsbl位置了:
固化的lwip用的icf设置:
解决办法:
按下图改了以后,还是不对,原因是:ram_start用ddr_cache_start,这里没改对。
要是还不行,直接把ddr的icf替换成例程里面的icf,就可以运行了。
十一,timeout能单独配置吗?还是说就4字节,具体时间和每个字节的时间有关
十二,现象:下载代码,跳入异常状态,无法进入单步状态,直接下载的时候就报这个错误
原因分析:
1你把复位改成硬复位试一下。2你flash里是否有程序。3你的板子当前是级联还是独立模式
十三,7045程序跑起来以后,有什么办法通过串口给ps发指令,然后通过pl jtag在线加载bit,加载完成后通知ps继续运行,ps程序裸跑,不重新加载,也就是能随时在线跟新PL bit程序运行而又不影响PS程序造成死机?
解决:串口要能接收处理指令,可以在加载前关掉user level shift寄存器,加载后再打开。关掉这个寄存器,加载pl bit的时候就不会影响ps程序运行了。串口给ps发串口指令,ps再把这个寄存器打开,就可以重新访问pl了。
十四,现象:测试程序在QSPI启动独立模式下可以多次擦写没问题
但是先下载PL把JLINK打通然后用JLINK下载到QSPI程序,第一次没问题(在这次之前都可以正常烧录),但是JLINK把这个下载完后,再次烧录的时候,发现JLINK灯红绿闪烁并下载失败无法连接。只能硬件重新改到JTAG独立模式,把JLINK程序擦除再改回QSPI独立模式才可以再次进行PS烧录到QSPI里。
原因分析:
经过验证是PS程序导致上述情况,一般程序错误导致PS无法烧录到QSPI里,只能通过改JTAG独立模式启动擦除再改回去,原因是这个是用户应用处理异常导致烧结时halt CPU失败。
解决办法:
可以尝试在烧结界面advanced界面下,勾选或者去掉hardwarereset选项分别尝试。如果还是不行的话再尝试FlashLoader烧结(一般出现这种情况就用flashloader下载,只是下载速率很慢)。如果上述两种方法都不可以,就需要手动切到Jtag模式烧结。最好还是查一下应用是不是有异常。
十五,主芯片是FMQL45T900,网络硬件识别是正常100M,但配置完IP地址后会变成10M
原因:设备树没指定速率,是配置ip又自协商了。
十六,现象:客户提供测试程序QSPI 级联模式可以正常扫描到FPGA和ARM,下载程序也正常。自己程序在QSPI级联模式下vivadio用JTAG找不到FPGA更不能下载,但是用JLINK可以扫描到FPGA但是不能下载程序。按道理级联模式应该FPGA和ARM都可以识别到,但JLINK下只能扫到FPGA,也即是硬件优先级高于软件。
原因分析:自己程序在QSPI级联模式下vivadio用JTAG找不到FPGA更不能下载,但是用JLINK可以扫描到FPGA但是不能下载程序。使程序出错硬件的优先级应该高于软件,JTAG扫描FPGA不应该受到影响。
解决办法:procise工程里面勾选PJTAG,勾选了独立模式,新版本procise,优先级软件高于硬件。勾选就切独立模式了,可以去掉这个勾选项,generate out 并重新导出fsbl,制作boot.bin扫描FPGA或ARM就正常了。
十七,现象:程序是25M,下载完我们程序后用QSPI启动,发现PS串口没有任何打印信息(正常测试程序13M启动从FSBL开始输出打印信息),看现象从上电到FSBL这中间已经出了问题。
原因分析:25M文件都包含fsbl.out bit arm的.out代码 生成的bin文件25M,大小分别fsbl.out 是1M多 bit是13M arm.out文件是13M多( arm.out包含arm工程 rebulid all 生成的.out文件 )。直接证明,app程序有问题,超出正常范围。因为复旦微fmql芯片不支持两片并行启动,如果只支持单片,应用程序25M的话,硬件挂2片16M他们也用不起来。
不支持4线的QSPI模式。我现在是2片各挂一片的应用,这个看资料没有说不支持。也即是双4线的串行不支持,双8线的串行也不支持。启动时候qspi不可以串行io访问,如果可以的话,那就bin就可以超过16MB。进口xilinx zynq就是可以支持串行io访问。bin可以超过16M,但要放在qspi0里面。qspi1只能作为存储,不能用于启动。启动只能是qspi0,qspi1不支持启动。128M flash不支持这么超过16M大文件串行所以导致无法引导启动。
解决办法:把程序优化到13M之后启动就正常了(注意:如果把DDR的空间弄的比较大导致程序到超过13M,需要把DDR空间设置改成初始水平后才能生成小于13M的app)。这就是空间不足的问题导致烧录问题。或者更换256M flash,才能启动超过13M的应用程序。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!