打算学着玩玩嵌入式开发,手上有个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
1 条评论
Tooru · 2022年8月4日 上午11:43
真的非常謝謝你,讓我找到這篇學習紀錄,我一直想看到被光腳位,在設備樹如何設定。