您尚未登录。

#1 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 求图片解码库 » 2020-05-21 10:40:49

硬解可移植性差,软解有很多方案:
JPG:libjpeg、tjpgd
PNG:libpng、lodepng
JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC:stb_image

#2 全志 SOC » F1C100s裸机USB程序关闭调试信息导致无法正常使用 » 2020-05-12 14:35:00

ntmusic
回复: 0

借用香酥肉饼大神Keil裸机工程https://whycan.cn/t_3645.html,因USB工作时打印的信息太多了,影响其他调试,就重新定义了一个空函数USBLOG()
int UBSLOG(const char* format, ...)
{
    return 0;
}
在usb.h中更改usbprint的宏定义
#define usbprint    USBLOG
编译下载后,发现USB居然无法正常使用了,电脑能识别,但串口无法打开。这是咋回事,有人遇到吗?

#3 Re: 全志 SOC » 推荐个F1C100S 能直接驱动支持投影模组, 彩色分辨率480*240, 9.98元超便宜, 找齐了资料 » 2020-05-12 13:36:17

robot99 说:

这个屏 656信号,或者601信号都可以点。
供电 24pin VCC 给3.3V ,其他I/O 标C的都是接电容。

好咧,有空来尝试点一下

#4 Re: 全志 SOC » 推荐个F1C100S 能直接驱动支持投影模组, 彩色分辨率480*240, 9.98元超便宜, 找齐了资料 » 2020-05-12 11:41:25

这个屏需要提供升压部分的电路吗?看到有一个PWM输出和一个FB引脚,这两个引脚怎么接?

#5 Re: 全志 SOC » 关于CPU 占有率 » 2020-05-12 10:40:32

CPU占用率,是怎么计算出来的,以什么为标准呢?CPU利用率和占用率,是一个概念吗

#6 Re: 全志 SOC » 有人将荔枝派nano超频到800MHz以上运行了吗? » 2020-05-01 10:26:31

zhengjieming 说:

ntmusic大哥,我跟你一样都是裸奔的,请问一下那个DDR的PLL怎么配置呢,我看手册来配置了一下挂B了,能否贴一下代码看看呢,新手上路手册看得迷迷糊糊的,还想把DDR配到600MHZ去了,这个DDR最高能跑到多少呢。

参看手册把PLL_DDR_CTRL_REG的值配为:(1<<31)|(1<<20)|(N<<8)|(1<<4)|(1<<0),其中DDR频率为:24*(N+1)MHz,然后等待PLL稳定while(PLL_DDR_CTRL_REG&(1<<28)==0)就可以了啊。如果你使用论坛大神裸机程序,在sys_dram.c文件中有一个#define PLL_DDR_CLK在这里定义一个主频就好了(实际运行频率是这个定义的2倍)。经过持续运行发现,DDR还是不要随便更改主频,可能涉及一些刷新和时序问题。我之前配为480M,跑一小时没问题,但再久就出现花屏之类的问题了。然后我更改为408M,已经运行1天了没问题

#7 Re: 全志 SOC » F1C100S的Keil裸机USB+LCD+PWM+GPIO工程搞定,修复GNU工具链BUG » 2020-04-30 09:33:22

这个GNU...stdio.h里面的功能函数全部要自己实现?还有很多标准函数都是不支持的?移植了一段视觉处理相关算法,纯算法,与硬件无关的也报一堆错,math里的函数也不能用,后来才发现要在设置里启用math库,启用后又报里面的函数__errno未定义,懵了

#8 Re: 全志 SOC » 有人将荔枝派nano超频到800MHz以上运行了吗? » 2020-04-29 12:30:01

zhengjieming 说:

各位大神能否告知怎么改DDR运行频率吗,我发现用F1C100S跑个图像算法耗时太大了,光是拷贝一个VGA的图像数据就花了9毫秒了。主频我都升到900MHZ去了,估计是RAM速度太慢的。

我试了下主频768M,DDR默认312M时,在DDR中拷贝【640*480*4】大小的数据到另一块区域,耗时14ms。。。。将DDR主频设置为480M后,拷贝时间为9ms.。。。我是在裸机环境下开发,因此设置只要修改一下DDR PLL寄存器就行了

#9 全志 SOC » 有人将荔枝派nano超频到800MHz以上运行了吗? » 2020-04-28 22:05:55

ntmusic
回复: 23

在荔枝派nanoo上尝试将F1C100s超频运行,基于论坛Keil裸机工程上测试,测试结果如下:
(在SPL阶段还是按默认频率CPU 408M、 DDR 312M运行,SPL结束后进行CPU频率调整和DDR频率调整。USB电源5V2A)
开启定时器0 1000HZ中断情况下:
1.CPU 744MHz DDR 312MHz 接4.3寸 480*272屏,全亮度持续刷屏运行半小时一切正常
2.CPU 744MHz DDR 480MHz 接4.3寸 480*272屏,全亮度持续刷屏运行半小时一切正常
3.CPU 768MHz DDR 480MHz 接4.3寸 480*272屏,全亮度持续刷屏,运行n秒左右宕机(n在10秒内)
4.CPU 768MHz DDR 312MHz 接4.3寸 480*272屏,全亮度持续刷屏,运行n秒左右宕机(n在10秒内)
5.CPU 768MHz DDR 480MHz 不接显示屏(程序不变),运行半小时一切正常
6.CPU 816MHz DDR 480MHz 不接显示屏(程序不变),运行n秒左右宕机(n在10秒内)
关掉所有中断后
7.CPU 816MHz DDR 480MHz 不接显示屏(程序不变),运行半小时一切正常
8.CPU 864MHz DDR 480MHz 不接显示屏(程序不变),无法进入主程序
测试发现超频运行电源稳定性很重要,而荔枝派nano的电源貌似并不能支撑其达到800MHz的稳定运行,尤其是带了屏以后。至于增加定时器中断后主频稳定性也受影响暂时不知道该怎么解决。
最终我测试我的荔枝派nano稳定运行的最大频率如下(不接屏,接屏再降为744M主频)
none.jpg
极限运行频率(无任何中断)
none_20200428-2148.jpg

PS:我下的裸机Keil工程貌似存在一个小BUG,文件sys-dram.c中,对DDR频率的配置宏为#define PLL_DDR_CLK  (151000000),但实际读回来DDR频率为312MHz,查看代码和手册发现配置上存在一个小问题,在K和M值相等的情况下,公式里不需要*2的,把*2去掉就行了,而且阴差阳错的,配置为151M然后公式里乘以2后变为312M,正好是默认DDR主频。。
bug.jpg

看网上有人说F1C100s能达到900M,不知是怎么实现的呢?

#10 Re: 全志 SOC » 推荐个F1C100S 能直接驱动支持投影模组, 彩色分辨率480*240, 9.98元超便宜, 找齐了资料 » 2020-04-28 10:08:35

感谢楼主。看这接口,貌似不好搞啊。。但还是撸了几个,期待有奇迹

#11 Re: 全志 SOC » 调通F1C100s的SPI DMA » 2020-04-26 11:23:32

水一贴,DMA结合操作系统才能比较好发挥优势,在等待DMA传输结束时CPU可以很方便的切换出去做别的事情,而裸机则一般要通过设置状态结合中断来使用,程序结构也会变得奇奇怪怪,若使用查询等待的话可能还不如直接使用CPU操作来的快,因为CPU一般拥有总线最高优先权

#12 Re: 全志 SOC » 关于F1C100s的DMA使用 » 2020-04-24 22:37:48

armstrong 说:

cpu把数据写到内存,然后交给外设或dma,要用clean;
cpu读取由外设或dma放在ram的数据之前,要invalid;
dcacheinvalid和dcacheclean指令,要么是针对mva的,要么是针对cache-line的,要么就整个dcache
所以MMU_InvalidateDCacheArray函数封装了mva的遍历。
对ram变量也有cache-line对齐的要求,即变量或数组的大小和地址必须32字节对齐,否则会破坏变量。

感谢您的热心指导,受益匪浅!实测使用mmu_invalidate_dcache是正确的,之前测试不起作用是粗心了没有设置对DMA的目的地址,犯了低级错误

#13 Re: 全志 SOC » 关于F1C100s的DMA使用 » 2020-04-24 16:18:35

armstrong 说:

对cache的使用知识,是裸机开发ARM9必备啊。你可以从我的rtx+emwin包里,找到mmu_c.c和mmu_a.s,我把所有mmu操作的api都放在里边了。你这个情况,只要调用我的MMU_InvalidateDCacheArray函数,使dma访问过的ram对应的cache无效就行了。注意,“无效”和“清理”是两个截然不同的概念。

谢谢指点,对arm9刚接触很多都还不熟悉,尤其是底层方面,还得向各位大牛学习!

#14 Re: 全志 SOC » 试试用F1C100s来3D绘图 » 2020-04-24 15:10:40

hameyou 说:

CPU的频率运行多少啊,感觉很流畅

主频408M

#15 Re: Cortex M0/M3/M4/M7 » 基于STM32探讨单片机软件架构设计问题 » 2020-04-24 13:22:19

国产RTThread的软件包不错,上手也很容易,框架也是比较清晰的

#16 全志 SOC » 关于F1C100s的DMA使用 » 2020-04-24 12:41:37

ntmusic
回复: 14

这段时间断断续续在搞F1C100s的ADC音频采集,使用FIFO中断的方法采集数据没问题(这里有一个小坑,FIFO中断中读数据时,我用结构体地址指向的方式将Rx寄存器的值读出,发现不管读几次都只能读出FIFO最后一个值,按理说每读一次Rx应该就从FIFO中取下一个数据才对。后来实在没法子,用了Read32()函数,就可以了。。。。),但使用DMA传输就不行了,DMA缓冲区的数据一大部分压根不变化。啃了好几遍手册,各个Channel都试了,仍不行。一开始以为又进了读FIFO之类的坑,但最后排查来排查去,问题应该是Cache的问题。
    我是在RTT BSP中开发,在board.c对MMU的初始化函数中可以看到,32M的DDR是全部Cacheble的,RTT内存管理当然也是Cacheble,目标缓存是rt_malloc出来的,在DMA结束后,CPU操作这些缓存数据时使用的还是Cache中的数据,导致一致性问题。尝试了一下,在rt_hw_mmu_init中直接将mmu_enable_dcache()屏蔽掉后,编译运行一切正常。。
    当然关掉dcache是不实际的,但我不知道什么指令能使Cache和内存同步,mmu.c中的mmu_clean_invalidated_dcache()函数和mmu_clean_dcache()函数等好像也不起作用,于是换一种方式,在mmu_init函数的mem_desc表中,添加一部分DDR地址为“RW_NCNB”,把DMA传输的目标地址指向这个区域,就没问题了。

#17 Re: 全志 SOC » 试试用F1C100s来3D绘图 » 2020-04-15 13:36:19

armstrong 说:

你这个演示bin,cpu主频和ddr频率是多少啊?写入flash运行,经常性宕机。

程序在RTT源码包自带的allwinner_tina BSP中修改而来,未修改CPU和ddr频率,默认主频408M,在我的荔枝派nano板上运行一切正常,没发现过宕机情况啊

#18 Re: 全志 SOC » 试试用F1C100s来3D绘图 » 2020-04-15 09:27:44

armstrong 说:

楼主牛逼!分享一下移植过程吧,光看着眼馋。

我只是搬运了一下代码。。我参考的是这篇帖子,基于Frambuffer后端实现
https://blog.kaaass.net/archives/1340

#19 全志 SOC » 试试用F1C100s来3D绘图 » 2020-04-14 17:42:58

ntmusic
回复: 21

为了试试F1C100s的性能,将OpenGL的子集TinyGL的分支PicoGL做了一个小移植,在荔枝派nano上运行效果如下:(屏分辨率480*272)

效果还行,帧率没统计,目测较为流畅,程序也还没优化,待以后有时间再研究下吧。想体验的可以烧附件bin看看。地址烧到Flash 0即可。

本站下载: TinyGL.rar

#20 Re: 全志 SOC » 关于裸机F1C100s的USB疑问 » 2020-04-10 20:02:10

晕哥 说:

感谢晕哥!早前浏览帖子时下载了一直放着没试,今天试的时候都没找到帖子了

#21 全志 SOC » 关于裸机F1C100s的USB疑问 » 2020-04-10 17:36:23

ntmusic
回复: 2

准备将论坛大神的裸机USB驱动移植到RTT上,然后发现CDC设备类型下,一次只能接收不多于8字节的数据,超过8字节无任何反应,中断也不进入。发送目前倒没发现什么问题。我对USB没多大深入了解,请问各路大神,这是咋回事?

#23 Re: 全志 SOC » 索取示例代码以在F1C100和RTT中使用Mpeg和jpeg音频和图像解码器 » 2020-03-30 12:46:24

staunchheart 说:

是的,AudioCodec,资料有,含录音与播放。移到RTT上产不难。
USB的话还没有试,只有USBD部份,USB HOST没有。
老大方便加个Q联系一下吧。。

1204451089,我很少上Q的,更常混论坛了现在:D

#24 Re: 全志 SOC » 索取示例代码以在F1C100和RTT中使用Mpeg和jpeg音频和图像解码器 » 2020-03-30 10:08:12

staunchheart 说:

嗯,说得对。不过他还提供声音、USB、TVIN、TVOUT驱动这些的裸机代码,1500元的价格还是很公道的。
裸机代码用来作参考很方便,JPEG硬解还是很想要,而且提供的LIB,要移植到RTT几乎不可能,他有自己的一套机制,有些与RTT相冲突。
所以想问楼主是否公开。
当然公不公开是自己的选择,都值得尊重。

声音的驱动,是指AudioCodec模块那部分?那个好像资料是有的,最近我也在看ADC音频采集部分,USB的论坛大神也有搞出来,应该可以移植到RTT下。TVIN和TVOUT比较少用到的功能吧

#25 Re: 全志 SOC » 索取示例代码以在F1C100和RTT中使用Mpeg和jpeg音频和图像解码器 » 2020-03-30 09:22:06

staunchheart 说:

网上买撑机的老大有完成JPEG硬解,但只提供用MDK编译的LIB。
硬解1280x720   30帧,
硬解主要是可以腾出CPU时间。

对于我们这些爱好者来说花大价钱买一个lib就感觉没啥意义了,除非拿来做项目吧

#26 Re: 全志 SOC » 索取示例代码以在F1C100和RTT中使用Mpeg和jpeg音频和图像解码器 » 2020-03-30 09:10:18

软解的方案很多,硬解没资料。。。RTT官方有很多package,其中包含有JPG的解码包TJPG,我测算过如果将F1C100s的主频提高到768MHz,在DDR中软解一张480*272较为复杂的JPG图片(117KB)大概耗时41ms,勉强能接受。。

#27 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2020-03-26 17:04:07

staunchheart 说:

TKS,,水一贴。希望更多的人加入RTT+F1C100S。
其实我将声音驱动也搞好了,不过用了别人的代码,他不希望公开。
还是尊重他的要求,哪部份我只能去掉。

理解的,毕竟是他的劳动成果。我本来就是在这个论坛学到的知识,有很多大神在默默奉献自己的代码和踩坑经验,自己虽学艺不精,但能给其他人一些帮助是再好不过了。很多时候提供源码不是重点,重点是希望有人能指引一下方向

#28 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2020-03-26 16:48:08

OggyJFX 说:

这个能提供源码么?
或者加上帧头帧尾吧,否则只要错一个字节,就永远回不来了。

放心不会的,接收数据是以数据帧为单位的,帧与帧有间隔的,即使串口受到扰动,只要串口连接恢复正常,通信就恢复正常。唯一问题可能就是错误数据会导致光标乱跳吧,但事实是只要串口连接稳定,是不会有这个问题的。我上面的F1C100s工程里含了这个串口鼠标的代码的,如果你要这个上位机的代码,如下:
NTVisualTouch源码.rar

#29 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2020-03-26 16:34:39

staunchheart 说:

我下载了。我想将你的代码与我的
https://whycan.cn/t_3538.html
合并,然后发布到GITEE上。
我这里加了入I2C,GT911,看门狗驱动。将你的启动哪Bootloader合并放进去,是否OK。

没问题,欢迎探讨

#30 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2020-03-26 15:44:23

staunchheart 说:

友情顶,希望更多的人一起玩RTT。
压缩包下不下来。。。

奇怪,我上传成功了啊,我试了下确实下不来,不知道咋回事?

#31 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2020-03-26 15:35:56

对了,这里再上传一个“虚拟鼠标”的上位机软件,使用很简单,打开通信端口后(波特率115200),把鼠标移入触摸区域就行了。拉伸软件边框可以调整触摸区域大小,这个触摸区域就对应了屏幕的触摸区域。为了提高鼠标灵敏度可以将帧率调整为高。其实下发的数据非常简单,就每一帧就5个字节,因为仅仅做试验也不加什么帧头帧尾了,第一字节标识鼠标按压状态(按压或释放)。第二,第三字节作为当前光标位置X坐标,第四第五字节为Y坐标,就这么简单。。。
3.jpg
我使用荔枝派UART2做虚拟鼠标数据接收,引脚是PE7、PE8。
软件在此,感兴趣的可以试试。
NTVisualTouch.rar

#32 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2020-03-26 15:25:48

ntmusic
回复: 195

最近因工作忙起来了较少去整F1C100s了,趁今天较空闲,就跟大家分享一下我前段时间把玩的成果吧。可能有点啰嗦,各位看官将就着看吧
前段时间玩的“硬光标”+LVGL演示

因为我也是刚接触到F1C100s不久,之前玩的都是M3,M4,M7内核的单片机,也是靠在挖坑网上参考各位大神的经验才逐渐上手,目前也仅仅会在RTThread这种小实时系统内把玩一下,对RTThread了解的还不是很深,对于linux什么的更是没入门。。。因此我在玩F1C100s的时候,真的就把它当做一个单片机在玩了,大家看看就好。

我先大概说一下我已经实现的功能:
1.开发环境:Windows,基于RTThread v4.0.1官方源码包,使用RTT ENV工具开发。如果要入门的,可以参考燕大侠的RTT新手上路篇https://whycan.cn/t_943.html
2.通过修改链接文件和启动文件,将BootLoader集成到App中,无需额外烧录boot,启动速度快且可控。
这里参考了香酥肉饼的帖子https://whycan.cn/t_3645.html,谢谢这里的大神们的贡献。关于这个我走的弯路可参考我另一个贴关于无boot启动的求助帖。。。
3.将mksunxi和sunxi-fel工具整合到一个批处理,在ENV工具中,实现编译后,直接执行这个批处理就可完成程序下载(当然SOC还是得进入到FEL模式),无需繁琐的各种打包操作,开发速度更快。
3.支持硬件4图层,硬件游标,剥离了原达克罗德驱动中时序控制和图层结构体。
关于LCD驱动这一块参考了达克罗德的帖子https://whycan.cn/t_1457.html,同样谢谢这些大神的贡献
4.移植了LVGL v6.1.1,(目前准备将其配置写入menuconfig中)
5.使用了UART2接收虚拟鼠标数据
6.开启了SDIO(RTT BSP包自带)

RTThread自带的BSP包中已经包含了Clock、UART、GPIO、SDIO的驱动了,再加上FB的驱动,已经可以用作一般项目开发使用了。下面主要说一下我开发的的程序中一些说明和注意事项。

1.第一个是关于BootLoader部分。这部分主要完成的就是将App加载到DDR中运行。App不需要关心在Flash中的地址(App是紧跟着Bootloader代码的),也不需要关心其大小(当然,由于我对DDR的使用区域重新做了划分,我限定App大小是4MB,详细见第4点)。这个Bootloader含有魔术头(BROM通过识别到特定字符才认为Flash中存在可执行代码),在生成bin文件后,需通过mksunxi工具修改一下bootloader头一些校验信息,然后就可以将这个bin通过sunxi-fel直接烧录到Flash地址0的地方开始运行。为了开发方便,我将这两个工具操作写在了一个批处理中,沿用Keil裸机工程中使用的bat名字flashtospi.bat。在ENV中使用scons编译后,直接输入flashtospi.bat就可进行代码烧录(与CMD命令一样,首次输入后,下次可以用方向键调取之前的指令,更快开发)。这里有一个要注意的操作,就是如果flashtospi.bat烧录执行失败(比如忘了使Soc进入FEL模式),那么就不要再直接执行这个批处理了,因为这个批处理会先在此对bin再次进行校验修改,这样bin的校验就不对了。解决办法就是要么修改下代码重新编译(不能直接再次scons,因为代码未变化的话不会重新生成bin),要么就手动执行sunxi-fel,或者就把flashtospi.bat中魔术头修改和下载的两个操作分到两个bat文件,这样每次编译后,先执行魔术头修改,再执行烧录。我是贪方便就放一起了。
1.jpg

2.我重新修改和整理了原达克罗德大神的FB驱动,参考手册,剥离了TCON时序控制部分,和FB的图层管理部分。支持硬件4图层。关于硬件4图层,我想简单说一下我的理解。F1C100s的显示引擎FB支持4个图层的显示与混叠,同时,还可以指定4个图层之下的背景颜色。也就是说,就算这4个图层你一个都不用,还是可以显示纯色背景,而这背景是没有所谓的显存的,通过一个寄存器指定。所有的图层都显示在这个背景色之上。这个背景填充永远是填满整个屏幕的,但是图层不同。这些图层更像是“窗体”,是可以显示在屏幕的任意位置的,大小也任意,这就很灵活了。我剥离出的图层参数结构体如下:
typedef struct
{
    uint32_t width;//图层宽度(像素)
    uint32_t height;//图层高度(像素)
    uint32_t posx;//图层显示相对屏幕左上角坐标X
    uint32_t posy;//图层显示相对屏幕左上角坐标Y
    uint32_t priority;//该图层显示优先级
    uint32_t pipe;//该图层使用混叠管道
    uint32_t alpha_value;//该图层透明度(整个图层)
    uint32_t alpha_enable;//是否使用图层透明度
    uint32_t vram_format;//图层像素数据格式,支持RGB565,RGB888,ARGB32
    void * vram;   
}lcd_layer_Struct;
前面的4个参数就不多说了,就是图层大小及图层在哪显示。这里说一下几个重点。
第一个就是图层显示优先级。因为支持4个图层,当显示图层多于2个后,必然涉及图层叠加问题,即谁在谁之上。这就是这个优先级控制的。优先级范围0-3,0为优先级最低,也就是显示在最下面,3为显示在最上面。当然优先级0的图层,也是在背景色之上的。这个优先级是可以随时更改的,就像激活窗体显示在最上面一样。参数修改后重新配置下层即可。根据手册说明,当图层数大于2个后,每个图层必须要用自己的唯一优先级,即不能有2个优先级相同,这点在设计时就要考虑好。
第二个就是pipe的使用。当图层透明度使能后,F1C100s有2个管道用于图层混叠,在多于2个图层时,必然至少有一个图层使用相同的管道。当使用相同管道的图层没有重合部分时,每个图层可以按显示优先级从上到下实现图层混叠。若相同通道的图层存在重合部分时,那么重叠部分只有优先级最高的图层能使用这个管道完成其它图层的颜色混叠。当然,如果图层透明度未开启,则图层显示不受这个通道的限制。
第三个就是前面提到的图层透明度。这里必须提一下这个透明度是全局的,由专门一个参数指定的(alpha_value)。每个图层的像素格式虽然可以是ARGB,但在硬件图层混叠时,并不是使用像素的A值,而是使用这个指定的alpha_value,像素的A值被忽略。因此想指望依靠这个硬件图层混叠功能实现类似PNG图片显示的功能就别想了。但这也并不是一无是处,比如做一些显示的淡入淡出、滑动显示等还是很好用的。
最后说一下图层像素数据格式和数据指针。在图层结构体中,可以直接指定数据使用的格式为RGB565、RGB888或ARGB8888,每个图层可以自由使用不同的像素数据格式,相互之间不影响。指针*vram直接指向图层像素数据区,这个数据区就是这个图层的显存,可直接读写操作。这个显存的格式必须和参数vram_format一一对应。也许看到这你就有想法了,每个图层的数据格式可以不同,那么就可以很方便的将这四个图层各司其职:比如层0用作GUI绘制层用RGB565格式,层1用作图片显示ARGB888,层2用作视频
播放RGB888...这样可以避免做更多的数据转换,实现快速显示的效果。
当然除了直接修改结构体参数重新配置各层参数可以实现参数设置外,我也额外提供了一些API接口,随时可以调用,比如控制层显示或不显示的Layer_SetEnable,设置层透明度的Layer_SetAlpha,设置层显示位置的Layer_SetPos等等,可以参考drv_fb.h文件。我在示例工程中也有层的使用范例。同时我默认把layer0放在LCD初始化过程中,作为默认的显示图层。
_20200326152234.jpg
这里顺便提一下剥离出来的LCD时序控制结构体,这个是与硬件相关的,也很简单,主要填一下屏幕物理像素宽度和高度以及一些时序参数即可。
typedef struct
{
    uint32_t pixel_clock_hz;
    uint32_t width;
    uint32_t height;
    uint32_t h_front_porch;
    uint32_t h_back_porch;
    uint32_t h_sync_len;
    uint32_t v_front_porch;
    uint32_t v_back_porch;
    uint32_t v_sync_len;
    uint32_t h_sync_active;
    uint32_t v_sync_active;
    uint32_t den_active;
    uint32_t clk_active;
    uint32_t line_per_pixel;
    uint32_t rstdefe;
    uint32_t rstdebe;
    uint32_t rsttcon;
    uint32_t backcolor;
} lcd_cfg_Struct;
这里注意一下line_per_pixel这个参数,是指硬件上与LCD连接的数据线宽度,如果连接的是RGB565接口的屏就是16线,RGB666的接口就是18线,RGB888就是24线,这与上面提到的图层像素数据格式无关。rstdefe、rstdebe、rsttcon参考的就是达克罗德大神的值,也没去深究了。backcolor就是上面提到的,最底层的背景色。

3.关于硬件游标,参考我上一个帖子。硬件游标作为独立的一个部件,位于所有图层之上,具备ARGB像素混叠,不过一般不会有人使用它。我是因为没办法触摸操作,所以使用了这个硬件游标来代替,顺便把串口2给用上了。

4.最后再来谈谈一开始说到的程序4MB问题,这是我自己规划的。因为我把DDR前面4M划分为APP运行区(含Data和bss段),紧接着4MB专门用作所有图层的显存区,剩余的24M用于RTThread的堆用于动态内存分配。实际上这也没多大必要。在RTThread BSP源码包的/drivers/board.h中,原本是自动根据APP加载的大小自动把余下的DDR分配给内核进行内存动态分配的,这样就没有APP大小的限制,这样每个图层的显存也通过动态内存来分配即可。而我是直接在APP之后划分了4M作为显存而不经过动态内存分配,因为我考虑到显存一般是永久性分配且比较大,没必要占用内存分配表。当然这样也有风险了,因为万一APP超过4M,我也没检测,这样运行就会出错了。所以不想麻烦的,还是保持官方做法就好。

5.关于LVGL的移植,就很简单了,网上有很多参考,只需实现flush功能就基本可用了。这里遇到一个奇葩,直接从网上下载6.1.1的源码包,用ENV工具编译时在文件lv_draw_rect.c中报错,经过排查是在其中一个画矩形的函数中,有两个局部变量是在函数代码中间定义后再使用。很奇怪的是其它函数也这样做都没问题,然后我把那两个变量放到函数开始后再编译就没问题了。我在程序中开启了图层0,并在图层0上建立了LVGL,所有的LVGL都是在图层0上操作。

6.最后一个是SD卡的问题。RTT官方BSP包中已经写好SD的驱动了,在menuconfig中开启SD设备就行。使能SD卡后RTT会自动建立一个SD卡检测及初始化线程,由于荔枝派SD卡没做插拔检测,因此只上电执行一次SD卡初始化,或者手动调用mmcsd_change触发再次检测,具体可分析一下源码包。SD卡初始化后需要进行挂载操作,可以使用自动挂载或者手动挂载。这里就要注意同步问题了,必须等初始化结束后再进行挂载。使用时发现一个问题,在频繁读SD文件时,容易出现CMD17错误,但过会再读又正常。暂时不知道是卡的原因还是啥,反正我试过3个不同的卡都会这样,而且出错时间点不定,有时很快出现,有时1小时都不出现一次。另外,BSP中的sd driver中使用了软件延时,这个要注意一下如果提高了CPU运行时钟,可能这部分延时需作相应调整。
好了,啰里啰嗦说了一堆,都是个人在近期把玩的结果,可能还有一些地方是理解有误的,还请大家指正。

代码如下。请先在RTT官网下载源码包,然后将附件解压到BSP文件夹中。RTT源码BSP中有很多其他方案的代码,除allwinner_tina外可全部删除。。
希望有更多的人参与进来玩,分享各自成果。下面想入门Linux,希望还有大神带路啊,不胜感激!
allwinner_tina_prj_v1.rar

#33 Re: 全志 SOC » 试试F1C100s的硬件游标HWC » 2020-03-23 10:03:40

感谢达克罗德大神的FB驱动,在移植到RTT时再做了一些优化,剥离出图层和时序控制结构体,可以自由使用4个图层,并移植了Lvgl(版本6.1.1),同时使用硬件游标,由于USB暂未实现鼠标功能,游标数据通过串口2从PC端获得,PC端再写了一个小工具发送鼠标数据,这样就比较快的玩起了LVGL。效果如下视频。

代码还在整理,如大家感兴趣我可另开贴介绍

#34 Re: 全志 SOC » 试试F1C100s的硬件游标HWC » 2020-03-23 09:51:57

gui401 说:

谢谢
楼主的小工具是用什么开发的?

C#开发的

#35 全志 SOC » 试试F1C100s的硬件游标HWC » 2020-03-20 16:51:40

ntmusic
回复: 19

准备在荔枝派Nano上玩LVGL,虽然接了电阻触摸屏,可是我这个荔枝派nano板子上并未有触摸的焊盘,原理图也找不到,那个空白的IC焊盘是啥。。有人和我的nano一样的版本吗,有的话能否告诉我一下这个触摸该怎么连接,我有空的时候再搞一下。
nano.jpg
现在手头没工具,但又想玩LVGL,正好F1C100s支持硬件游标,那正好,就用游标操作了。F1C100s的这个硬件游标确实非常简单,查看手册相关寄存器就那么几个。唯一麻烦的倒是游标的数据来源,是ARGB调色板索引数据,而且只有1,2,4bpp三种格式可用,不知道哪里可以找这样的软件转换,与其花时间去找,不如自己做一个。于是花了半个多小时做了一个数据提取工具,当然做的这个小工具只是负责把图片的颜色整理成颜色表和索引表,图片还得经过PS处理下。具体使用方法如下:
1.打开一张游标的图片,最好是PNG,颜色尽量不要太丰富,毕竟4bpp最大也就16色还包含了透明度。
2.在PS中依次点击图像-模式-索引颜色
PS1.jpg
3.3.在打开的索引颜色面板中,调板可以选择平均或局部(xxx),然后在颜色框中输入颜色值:1bpp为2色,2bpp为4色,4bpp为16色。然后勾选透明度(勾选透明度后,透明也算作一种颜色。如果原图并不是PNG图片,那就可以不勾选透明度,勾了也没用,这样生成的就是四四方方的游标图片)。
PS2.jpg
4.将更改模式后的图片另存为PNG图片。
5.打开F1c200sHWCDataMaker.exe小工具,选择需要转换成的颜色深度后,将刚才另存的图片拖进去,然后就会生成该颜色深度的颜色表和索引表的.h文了。
out.jpg
数据做好了,剩下就很简单了,将颜色表的值拷贝到F1C100s的DEBE HWC Palette Table寄存器组中,将索引表的值拷贝到DEBE HWC Pattern Memory Block中,然后在DEBE HWC Frame Buffer Format Register中配置一下游标宽高(只有32、64两种分辨率)以及颜色深度,最后在DEBE Mode Control Register中使能硬件游标即可。控制游标显示的位置,只需在DEBE HWC Coordinate Control Register中设置一下坐标即可,这样就完成了硬件游标的显示了。
通过实验发现,最大分辨率64*64模式下只有1bbp模式可以正确显示,32*32下1,2,4bbp都正确显示,不知道是啥原因,但一般32*32对于游标来说已经够大了,所以一般用32*32 4bpp模式来做游标显示效果很好。
下面是我做的显示效果
cur1.jpg
凑近看,可以看到我做的游标有半透效果【Alpha=0xA0】
cur2.jpg
工具在此,内含一个小光标图片,如果需要可以拿去使用。当然如果有更好的工具,也可推荐推荐
CursorMaker.rar

#36 Re: 全志 SOC » F1C100s在使用RThread时如何不经过RT bootloader直接运行app? » 2020-03-19 11:54:00

发现自己走了好多弯路,其实裸跑的Keil工程的启动文件可以直接嫁接到RTT的启动文件中,之前一直没成功是想太多了,现把我能用的代码放上,供参考。
开发环境:windows
开发工具:RT ENV
RT版本: 4.0.2
测试工程基于RT源码中BSP中的allwinner_tina系列,将附件解压至BSP目录下,scons一下即可完成编译。下载程序时,让F1C100s进入FEL模式,运行批处理flashtospi.bat即可完成程序下载。
如果要用在别的工程中,只需进行如下操作:(均指在ENV开发工具和RT源码结构中)
1.拷贝bootloader文件夹、tools文件夹、flashtospi.bat文件到对应工程目录下
2.用示例代码的link.lds链接文件替换掉工程的链接文件
3.用示例代码的libcpu\start_gcc.S启动文件替换掉工程的启动文件
进行如上操作后即可实现秒启动APP了(当然也不是秒启动,FEL过程还是费了大概0.几秒的时间,但相对用RT boot来说就快多了)
allwinner_tina_autoboot.rar

#37 Re: 全志 SOC » F1C100s在使用RThread时如何不经过RT bootloader直接运行app? » 2020-03-18 17:22:58

staunchheart 说:

rt_system_scheduler_start()这个卡死,你具体是改了哪个地方呢?

我现在是先用keil工程生成一个bootloader.bin,还没把boot+app一起编译。之前这样做也会卡在rt_system_scheduler_start(),后来我把bootloader中的irq和fiq代码删掉就可以了。现在吧boot跟app一起编译时,又出现卡在rt_system_scheduler_start()的情况了

#38 Re: 全志 SOC » F1C100s在使用RThread时如何不经过RT bootloader直接运行app? » 2020-03-17 17:28:27

staunchheart 说:

这个问题我也遇到了。。我的工程用GCC编译没问题,用MDK编译后rt_system_scheduler_start()卡了。
一直没有找到原因,这段时间在搞声音驱动,所以一直没管这事。你这个贴子对非常有意义,希望与你一起研究。
希望可以跟你加QQ。

https://gitee.com/zhangheyang/f1c100s_rt-thread
然后从RTT中找到对应的start_rvds.S  context_rvds.S
修改几处代码后就可以
set RTT_CC=keil
set RTT_EXEC_PATH=D:/develop/Hardware/Keil_v5
scons

还是想把boot跟RTT整合到一起,今天抽空再次把bootloader程序和RTT工程链接到一起,是可以正常启动了,但运行不正确,一旦启动调度就出错
Boot to SPI mode

\ | /
- RT -     Thread Operating System
/ | \     4.0.2 build Mar 13 2020
2006 - 2019 Copyright by rt-thread team
Execption:
r00:0x808007e4 r01:0x00000000 r02:0x00000024 r03:0x00000080
r04:0x00000000 r05:0x00000000 r06:0x80800958 r07:0xffffffff
r08:0x0000005a r09:0x00000024 r10:0x80800904
fp :0x00000000 ip :0x00000000
sp :0x800761c4 lr :0x80000940 pc :0x80000940
cpsr:0x20000013
undefined instruction
thread - main stack:
thread   pri  status      sp     stack size max used left tick  error
-------- ---  ------- ---------- ----------  ------  ---------- ---
估计是堆栈之类的没搞对,还得再仔细琢磨

#39 Re: 全志 SOC » F1C100s在使用RThread时如何不经过RT bootloader直接运行app? » 2020-03-16 17:47:31

问题解决了,把Keil工程中启动代码中的irq和fiq代码删除就可以正常启动RTThread的app了。。。。虽然不知道为啥,但确实是可以了

#40 Re: 全志 SOC » F1C100s在使用RThread时如何不经过RT bootloader直接运行app? » 2020-03-16 17:33:18

感谢楼上大神的解惑,大致搞明白了BROM,SPL等的关系
现在我换了一种方式,由于RTThread的bootloader启动不可控,我就想写一个boot来代替RTT的bootloader,再分析Keil裸机工程,其实也就是一个Bootloader+App的结合体,于是正好借用其Bootloader部分,于是我做了如下修改:
1.修改sys-copyself.c中拷贝数据的代码为从地址0x33000开始加载1024KB数据到地址0x80000000中【RTT Bootloader默认app存放地址为0x33000】
sys_spi_flash_read(0x33000, 0x80000000, 1024*1024);
2.修改启动代码,把拷贝数据结束后跳转到_main的直接改为跳转到0x80000000中执行
原来的:
    /* Call _main */
    ldr r1, =_main
    mov pc, r1
_main:
    mov r0, #1;
    mov r1, #0;
    bl boot_main
    b _main

修改后:
    /* Call _app */
    mov r0, #1;
    mov r1, #0;
    ldr pc, =0x80000000   
    b .
3.编译这个keil工程并烧录到地址0区域
4.在ENV工具下编译RTThread工程,用DKTool将生成的bin直接烧录到0x33000区域
上电启动后,RTThread可以被加载运行,打印出了version信息,但却没有正常进入调度。整个运行过程打印信息如下:

Boot to SPI mode

\ | /
- RT -     Thread Operating System
/ | \     4.0.2 build Mar 13 2020
2006 - 2019 Copyright by rt-thread team
程序到这里就停止了,经过排查,发现RTT在启动调度前都是正常运行的,启动调度即调用rt_system_scheduler_start()后,调度没有正常起来。怀疑是中断向量不正确导致的没能正常进入上下文切换,有没有大神可以帮忙解惑一下,是boot过程直接跳转地址带来的问题,还是RTT的app必须还是得由RTT自己的bootloader来加载才行?还是什么原因导致调度不正常?

#41 全志 SOC » F1C100s在使用RThread时如何不经过RT bootloader直接运行app? » 2020-03-15 16:52:52

ntmusic
回复: 41

请各位大神帮忙解惑,我刚接触这个芯片不久,用的是荔枝派Nano,在使用RTThread开发时,
要先烧录RT的bootloader(rtboot-1.0.3.bin),然后用官方ENV工具编译生成的bin再用
rt_ota_packaging_tool工具打包成rbl文件,然后再让F1C100s重启进入bootloader模式,
用PersimmonModConfigTool恢复App的方式更新app。。。过程繁琐不说,由于启动时要经过RT
的bootloader过程,就算把bootloader配置成0延时,最后进APP也差不多经过1秒,重点是,
在进bootloader阶段时LCD的背光总要闪一下,强迫症让我非常难以接受,就想干掉这个
bootloader的过程,上电后直接跑应用程序不是更好吗?

我的开发都是从RTThread官网上下载的ENV工具和RTThread源码,源码BSP中包含有allwinner_tina,
因此就都在此基础上进行开发,编译后能正常生成bin文件,但这个bin文件不能直接烧录,还得打包成rbl文件,
再用恢复工具恢复,这样我压根就不知道这个bin烧录到了Flash具体什么位置。。因我是新手对于F1C100s的
启动过程一无所知,我就希望这个生成的bin能直接烧录到Flash 0地址,然后上电就启动不就最好?

后来在网上看到了很多大神裸奔F1C100s的帖子,还有Keil下的工程,于是我就想自己来摸索一下。
既然RTThread生成了bin了,那么应该只是前面引导的问题,只要把引导加到这个bin文件上,
应该可以直接上电就跑起来吧?于是我重点就移植启动文件start_gcc.S以及链接文件link.lds,
参考的是 https://whycan.cn/t_3645.html 这位大神提供的Keil工程文件中的启动代码和分散加载文件,
一开始只是把Keil工程的启动代码中的Bootloader头信息加到了我的启动代码中,编译后,
用mksunxi.exe工具修改了bin文件校验信息,然后满怀希望的把这个bin文件烧录到Flash地址0的区域(感谢迪卡大神的DKTool),

然而板子没有任何反应,但应该是识别到了Flash中的启动信息,因为没有进FEL了。于是我再参考Keil工程,
一步步把Keil的启动文件一个个的加到我的启动代码(这里有一点不清楚的是Sys-CopySelf之类的有什么用途,
难道不是由BOOTROM完成的代码拷贝到DDR吗。。),但加完了都不启动,啥信息都不输出。。

附上我修改后的启动代码和链接文件,请大神帮忙看看,为啥不能直接启动运行程序,
难道RTThread源码包编译后的bin程序,一定得由RTBoot引导才能运行吗?另外我还有疑问,
手册上写DDR1的地址是从0x80000000开始的,然后RTThread的bootloader启动APP时的
信息是Start app from 0x80000000,那我就很郁闷了,假如这个bootloader是完成了把app
程序加载到DDR的0x80000000区域,那么这个bootloader程序,是在哪个区域运行的???
自己覆盖了自己??还有这个bootloader是由BOOTROM拷贝到DDR中运行的吧?
还是直接从Flash中运行的??

希望有大神帮忙答疑解惑,已经困扰2天了,谢谢!

start+link.rar

#42 Re: 全志 SOC » F1C100S的Keil裸机USB+LCD+PWM+GPIO工程搞定,修复GNU工具链BUG » 2020-02-24 12:12:00

下载了楼主的工程文件,修改好ToolChain路径后编译,出现如下错误,请问大神这是什么原因??
Rebuild target 'Target 1'
compiling dma.c...
Error: arm-none-eabi-gcc.exedebug: error: Files: No such file or directory
Error: arm-none-eabi-gcc.exedebug: error: (x86)/Keil/ARM/CMSIS/Include: No such file or directory
compiling main.c...
Error: arm-none-eabi-gcc.exedebug: error: Files: No such file or directory
Error: arm-none-eabi-gcc.exedebug: error: (x86)/Keil/ARM/CMSIS/Include: No such file or directory
...
".\Objects\f1c100s.elf" - 42 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed:  00:00:07
我的开发环境是WIN7 64位系统,Keil安装在D:\Program Files (x86)\Keil中,版本是5.24.2

页脚

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

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