打算学着玩玩嵌入式开发,手上有个licheepi nano,用的全志f1c100s soc 内置32m dram,就从这个入手,记录一些遇到的坑。

0x0 只有PC引脚上的spi0支持启动

精准踩坑:虽然看datasheet上 spi0的引脚既可以是PC0到PC3 也可以是PD18到PD21,为了兼顾sd卡,spi flash,sdio wifi,我画的底板上flash接的是PD18-21,结果!!芯片brom只能从PC那一组引脚的spi0启动!!(含泪飞线)

0x1 spi flash系统构建

参考大佬的文章,成功编译了u-boot+linux+buildroot,插电,开机!

不出所料,Kernel panic

报错FATAL:kernel too old

猜想可能是buildroot用的glibc不支持老kernel版本了,尝试解决:

然后重新编译buildroot(好慢),制作镜像,烧写,插电,开机:

轻松解决【

0x3 点屏(ili9341 spi)

首先是在内核中启用fbtft:

Device Drivers  --->
	[*] Staging drivers  --->
    	<*>   Support for small TFT LCD display modules  --->
        		<*>   FB driver for the ILI9341 LCD Controller
                <*>   Generic FB driver for TFT LCD displays

然后修改设备树

suniv.dtsi soc节点下添加spi1和pwm:

pio节点下添加spi1_pins_a和pwm1_pins:

suniv-f1c100s-licheepi-nano.dts 增加spi1修改:

根节点添加backlight:

编译烧写插电开机 屏幕轻松点亮【

执行# cat /dev/urandom > /dev/fb0,出现花屏为正常

美中不足的是,上电启动的时候backlight比fbtft更早加载,导致最开始屏幕亮起的时候是白屏(未初始化状态),下次尝试解决。

0x4 解决屏幕初始化比背光上电晚的问题

TODO

0x5 LRADC按键

我的板子上加了六个轻触按键,通过adc读取电压获取按键信息。相应的linux内核里有对应驱动(sun4i-lradc-keys.c)

suniv.dtsi soc节点下添加:

suniv-f1c100s-licheepi-nano.dts 增加lradc修改:(下面按键省略)

关于电压值的确定,驱动里的实现是选择电压差值最小的按键。调试的时候可以在lradc 中断里加一个printk打印电压值。

使用evtest进行测试

0x6 I2S驱动适配

解决方法发在了坑网:https://whycan.com/t_6547.html ,故不再赘述。

0x7 Buildroot一键编译

folk了一份aodzip大佬的buildroot bsp,增加了自己的修改,地址:https://github.com/MollySophia/buildroot-f1c100s

分类: 软件坑

0 条评论

发表评论

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注