您尚未登录。

楼主 #1 2020-01-09 10:33:12

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录

代码放到
https://gitee.com/zhangheyang/f1c100s_rt-thread

照着XBOOT老大的项目搞,其实没有坑,只是自己学艺不精,左脚踩到右脚摔了跟头。
一、移植I2C驱动
    照着Xboot上的配置,  本来没有坑,只是我没有处理
    #define I2C0_BASE_ADDR (0x01C27000)
    #define I2C0_CCU_BUS_SOFT_RST_BASE (F1C100S_CCU_BASE | CCU_BUS_SOFT_RST3)
    #define I2C0_CCU_BUS_SOFT_RST_BIT (1 << (80-64))
    write32(I2C0_CCU_BUS_SOFT_RST_BASE, read32(I2C0_CCU_BUS_SOFT_RST_BASE)|I2C0_CCU_BUS_SOFT_RST_BIT);
   然后就一路顺了。

二、移植GT911驱动
   1、Xboot在老的主线GT911线序不对,
       橘子 大神告诉我:
       https://github.com/xboot/xboot/pull/11/commits/b119553d16f6b260090f16436e250ff316a550a4
       看文档GT911有两个地址,这里用的是0x14,实际上这个代码与文档也稍有些差异,按文档INT后面要先拉低,再50msm后悬浮输入。
       这里没有,但能跑,想不通就不想了,能跑就行。
   2、在GT911中,INT中断后去获取从标,从解藕的角度来说,应该是
       i2c_transfer(dev->i2c, msgs, 2)   但这里面用了锁,RTT在中断中不能用锁。
       实际上XBoot代码中在中断时先关了中断,再开中断。应该不会有中时访问的问题,
       所以改成了ingenic_i2c_xfer(dev, msgs, 2),OK了,能跑了,我继续不管他。。
三、将LittleVgl升到6.1.1
      这里确实有些坑,搞了很久。
      1、6.0开始
           #if LV_COLOR_DEPTH == 24
           #error "LV_COLOR_DEPTH  24 is deprecated. Use LV_COLOR_DEPTH  32 instead (lv_conf.h)"
            #endif
           XBOOT上是24,5.0也是24,我选错方向了,我决定去改LittleVgl的代码。入坑了,出不来。
           这里要改的是FB里,改成32。
     2、本来应该出坑了,但LittleVgl本身改变蛮大的,5.0根本不需要lv_disp_buf_init 这种操作
          https://github.com/ZJ-TEK/ZJ_RT_Thread_NimBLE_LittlevGL_Nordic/blob/928dd3902a015931745ee36069a0e464b6a8aa97/ZJ_Application_NRF52840/001.lvgl_nimble_hrm/littlevgl/vgl_rtt_drv/lvgl_rtt_drv.c
          我参考这个修改的,他直接用FB的缓冲当作lv_disp_buf_init,实际上不行,必需另外定义一个缓冲区。
          然后就是修改一些5.0与6.0的函数不同的地方了,除了稍堵外没有什么坑。
    3、将触摸驱动加进来
          这个完全是没问题的,很简单,是我自己犯了些笔误错误将一个指针搞错了,大家应该不会遇到。
四、看门狗驱动
      完全没问题,挂D档,冲过去。
      在littleVgl中喂狗,也没什么可说的。
五、其它说明
      主要是我的硬件引脚与荔枝派这些不同,所以大家使用时要注意了。
      1、我的背光与LCD POWER有独立的IO控制,如果大家没有要修改一下。
      2、我的I2C RST INT引脚可能与大家不同。好几位朋友使用时就是这个问题,他的RST/INT在我的背光控制中。

这样,在RTT下,触摸、看门狗驱动都OK了。


看门狗的视频就不上传了,就是点击一个按钮,while(1); 
    13秒后设备会重启。

离线

楼主 #3 2020-01-12 14:57:25

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录

可能是地址不对吧。
当时觉得SPL BOOT只有10K,原来他提默认留了1M,
所以改了#define SIZE_START    (0x00010000)
这样的话,烧FLASH也要烧到同一个地址。

检查一下,如果用我的哪个脚本  windows目录下哪个我改了 。
linux下的我忘了改,我改后重新上传一下。

离线

楼主 #5 2020-02-05 12:41:03

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录

很多朋友以为RTT需要在LINUX下进行,实 际上在WINDOWS下就可以进行。

离线

楼主 #9 2020-02-06 19:26:34

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录

#ifdef LV_COLOR_DEPTH
#define LCD_PRE_PIXEL   LV_COLOR_DEPTH
#elif
#define LCD_PRE_PIXEL   24
#endif
不应该呀,是否修改了什么代码?

离线

楼主 #12 2020-02-06 21:23:36

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录

嗯,这里应该是要用#else
只是我用的GCC用#elif也可以。

离线

楼主 #19 2020-02-09 12:21:18

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录

这个看不出来,编译的问题,各自不同,只能他自己研究了。
首先我这个处理上是有不到位的地方,LittlevGL2RTT本来在RTT的pkgs中就有,而我升级到6.1.1后,因为不想改哪些配置,所以有的地方借用了他。
所以最好删除掉env的packges里Kconfig中的这个引用。
可以自己研究一下,将遇到的解决思路也放到论坛上给后面的人共享。

最近编辑记录 staunchheart (2020-02-09 12:26:47)

离线

楼主 #31 2020-03-21 10:32:09

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录

spunky 说:

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

本来想不懂脑子的使用代码,但发现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频率也行,我的板子就不行呢????所以只能归结为人品问题了。。。。。。。

惭愧,朋友的研究比我还深入。水平有限,只能将一些驱动移过来,太复杂的不会。
希望朋友继续研究,我近期也移了声音驱动,但因为使用了别人的代码,不适合公开。
要是有更多的人一起玩RTT+F1C100S就好了。

离线

楼主 #36 2020-04-20 19:50:13

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录

binbin 说:

祼机 Fc100s 声卡驱动,那位大神有实现过的

我搞定了,RTT下可以播放声音,但因为参考了别人的代码,他不愿意开源。

离线

楼主 #38 2020-04-20 21:27:33

staunchheart
会员
注册时间: 2019-12-17
已发帖子: 221
积分: 183

Re: F1C100S下LittleVgl+RTT触摸、GT911、看门狗踩坑记录

binbin 说:

强,学习学习,看来要自已挖坑了,先找  linux 代码看看


将bootloader合并到RTT后,启动1秒左右,并加入了声音播放驱动。

离线

页脚

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

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