您尚未登录。

#4 Re: 全志 SOC » F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录 » 2020-03-21 10:19:31

自己的坑,自己给坑填了。

本来想不懂脑子的使用代码,但发现spl跳转到rtthread后就是不行。没有办法,硬着头皮看了下arm9架构相关知识,最后发现代码基本都是对的,虽然有瑕疵,但能够使用。于是将注意力转向硬件驱动。最后终于发现是人品问题,具体经历我写出来供大家参考:

解释下楼主在对rtthread官方版本gcc_start.S文件的改造,在代码最开始定义了16个字节来表示固件信息:
    1) 第1个4字节是跳转命令,机器码为0xea000002, 汇编的意思就是b reset, 跳转到reset函数执行。0x2是偏移地址,计算方法是:(目标地址-当前PC地址 -8)/4。其中目标地址是16,当前PC是0,偏移地址就是0x2了。XBOOT的作战的第一条指令直接定义为0xea000016,也是一样的道理。
    2) 第2个4字节是幻数;
    3) 第3个4字节是固定为0
    4) 第4个4字节是固件长度,其中image_size定义在.lds文件中。

现在描述关于人品的大坑:
因为直接运行到SDRAM是没有问题的,只是spl拷贝到SDRAM不能成功。因此我一直怀疑是跳转或者是拷贝问题,毕竟这么多年的开发经验,直觉还是靠谱的:
1. 经过查找ARM9的指令集,觉得楼主的指针跳转应用程序,虽然没有处理相关堆栈,但对于现在的应用是没有问题的。于是将目标怀疑为拷贝问题。
2. 利用sunxi-fel工具读出flash应用程序固件文件(前1K字节),对比了下,与下载固件是一样的。
这下就懵逼了,为啥其他网友都可以,而我的板子就不行。于是就有了在本网站的发帖询问。。。。。。

昨天我突然想到,要不要看下SDRAM的拷贝数据是否OK,spi_flash驱动读出应用固件的第1个字节错误,本来是0x02, 读出来是0x03。找到问题就好办:
1. 拷贝完成后,程序强制修改0x80000000的首个4字节为0xea000002,然后跳转,正常了。。。
2. MCU开机可以自动加载spl到SRAM中,说明SPI FLASH是正确的,应该是驱动问题。结果发现楼主修改了SPI 的CLK频率,改回原来的频率,一切OK。。。

我查看了我购买的荔枝派焊接的NOR FLASH丝印,虽然不是原理图标注的那个厂家型号。但是按照W25Q128的手册来看,QSPI的CLK最大70MHz,普通SPI的CLK最大33M。因此还得把SPI的频率降低才行,才保证不会出错。


那现在就有个问题,为何其他网友的不改SPI的CLK频率也行,我的板子就不行呢????所以只能归结为人品问题了。。。。。。。

#5 Re: 全志 SOC » F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录 » 2020-03-20 01:26:56

请问楼主,我使用SPI FLASH方式启动,跳转后无反应,串口输出:
Init OK
Boot to SPI mode
Copy Flash offset 64 to RAM 0x8000000 size:366124
Copy Flash Ok!
Goto 0x80000000 ...

如果直接FEL模式启动时是正常的。我使用spiflash-read读出代码的前面1K字节,对比了下是完全一样的。

请问你遇到过这个坑吗?

#6 Re: 全志 SOC » 在F1C100S上根据RT-THREAD和XBOOT移植了480x272的液晶驱动上去 » 2019-10-12 23:52:08

作者很巧妙的利用了RTT的start汇编植入了16个字节的信息,后12个字节是表示固件信息,这个办法确实很巧妙,但感觉使用RTT官方的打包工具来包装,也许更好。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn