页次: 1
f1c100s大佬做出了的
https://whycan.com/t_8114.html
AIC8800放弃了,10元的RTL8733BS也香,顺手传个SDK RTL8733BS_WiFi_linux.zip
最近要再在h2 uboot上操作GPIOL口,想着这是闭着眼睛都能实现的操作,最后白白耗了一天.
问题表现为裸机条件下GPIOL地址0x1f02c00,怎么都写不进去,表现为值写进去但读出来还是0x07777777,怎么可能操作GPIOL口?
首先uboot使用md 0x1f02c00命令无效,然后自己强制写 *(volatile u32*)0x1f02c00还是无效.
MMU问题?自己用mmu映射一下0x1f02c00出来然后再写,还是无效.
关闭MMU,关闭cache,还是无效.
进入fel,xfel write32 0x01f02c00还是无效
进入fel,sunxi-fel.exe writel 0x01f02c00还是无效
有点蒙,看来写不进不是mmu的问题,肯定是GPIOL时钟没开,翻手册满心欢喜找到 BUS_CLK_GATING_REG2 位PIO_GATING,但发现这时钟一直开着的.
为什么linux能操作GPIOL而裸机就不行呢?不死心,hexdump对比CCU地址0x01C20000下一片寄存器,然并卵.
无奈翻dts,用关键字1f02c00搜索,好家伙终于炸出r_ccu: clock@1f01400来,手册找一找1f01400,发现根本没有,但出来一个R_PRCM.
放狗搜一搜R_PRCM,原来手册没公开,但是老外根据SDK整理了出来
https://linux-sunxi.org/PRCM
最后结论就是操作GPIOL之前要:
*(volatile u32*)0x01f01428 |= 1;
短短一句话耗了一天,希望后面的朋友不要踩坑.
财务自由的人才能有兴趣了,我看这屏像这个
https://item.taobao.com/item.htm?id=625742759811
话说我尝试超频,CORE VDD上1.6V电压才能超到900M,再高就不启动了.有空再试试2.4V.如果能到2GHz,这颗芯片就好玩多了
链接: https://pan.baidu.com/s/16iiiVAHI6GT8ElxTx3VORQ
提取码:qt74
复制这段内容后打开百度网盘手机App,操作更方便哦
7天
有时uboot的功能用不上,uboot启动kernel需要二级跳转,sunxi uboot spi为CPU polling,等等问题导致启动慢,强迫症受不了.
参考论坛各位大神代码,撸了一个自己的SPL,一直索取,现来分享.
不开cache mmu不开代码优化粗略测试4M+的kernel+DTB大概700ms-800ms即可完成读取启动.
IAR7 环境,先编译好,V3S R11进入FEL后直接双击Debug\exe\dl_flash.bat即可自动加校验下载.用的是串口2,可能需要大家自行适板修改一下.
有两点需要注意,不然无法直接启动kernel.
由于这个SPL不设置Kernel command line,所以需要内核make menuconfig时内置默认的Kernel command line
Boot options ---> (X) Use bootloader kernel arguments if available
并且设置Default kernel command string
第二是DTS必须要有内存的描述,不然无法启动
memory_DDR0@40000000 {
device_type = "memory";
reg = <0x40000000 0x4000000>;
};
因为上面两件事uboot做了,现在抛弃了它就要自己手动做了.
kernel自解压大概300ms,按下复位键起1秒即出现Booting Linux on physical CPU 0x0
另外
[ 0.143010] 1c28800.serial: ttyS2 at MMIO 0x1c28800 (irq = 31, base_baud = 1500000) is a 16550A
[ 0.719051] console [ttyS2] enabled
此处花了600ms傻等,无奈跟代码无果,直接波特率921600有惊喜.
配合这个SPL秒启不是梦,起飞吧,朋友.
链接:
https://pan.baidu.com/s/1ywdDmKRRqdqBY0BxqjWXtw
提取码:3lao
复制这段内容后打开百度网盘手机App,操作更方便哦
有效期7天
我特意测试了一下,主线linux 4.13.16
/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -mcpu=cortex-a7 -mtune=cortex-a7 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -O3 main.c
# ./a.out 5000
DISPCNT 5000
Cnt 4303
Cnt 8659
Cnt 13060
3.870秒
怀疑就是 -mfloat-abi=soft的问题,但是gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf无法使用-mfloat-abi=soft,所以无法测试
刚好之前分析过uboot,自己的bootloader成功启动过kernel,楼主参考下
1.
kernel_entry = (void (*)(int, int, u32))0x80000000;
kernel_entry(0, 0, 0x80c00000);
0x80c00000为DTB地址
2.kernel配置时 bootargs要配置为内置,这样bootloader省事多了
3.kernel dts文件加入内存信息,因为目前kernel内存参数靠uboot写dts传,这里我也是卡住了很久,直到将uboot bootz删减到最小才发现
memory_DDR0@80000000 {
device_type = "memory";
reg = <0x80000000 0x2000000>;
};
现在自己的bootloader使用spi dma读取kernel,启动速度缩短到2.xs液晶进界面
suniv.dtsi
line124
uart0_pins_a: uart-pins-pe {
pins = "PE0", "PE1";
function = "uart0";
};
uart1_pins_a: uart-pins-pa {
pins = "PA2", "PA3";
function = "uart1";
};
u-boot\arch\arm\mach-sunxi\board.c
line86
#elif CONFIG_CONS_INDEX == 2 && defined(CONFIG_MACH_SUNIV)
sunxi_gpio_set_cfgpin(SUNXI_GPA(2), SUNIV_GPE_UART0);
sunxi_gpio_set_cfgpin(SUNXI_GPA(3), SUNIV_GPE_UART0);
sunxi_gpio_set_pull(SUNXI_GPA(3), SUNXI_GPIO_PULL_UP);
之前花了一点时间改了一下,希望帮得上忙
我觉得这个ttyS0 init占用太多时间了,能不能改短一点
[ 0.192577] suniv-pinctrl 1c20800.pinctrl: initialized sunXi PIO driver
[ 0.325981] Serial: 8250/16550 driver, 8 ports, IRQ sharing disabled
[ 0.331286] console [ttyS0] disabled
[ 0.351550] 1c25000.serial: ttyS0 at MMIO 0x1c25000 (irq = 24, base_baud = 6A
[ 0.694320] console [ttyS0] enabled
贡献一个F1C100S的原理图,应该是某方案公司量产的唱戏机,电源DCDC使用的是BL8021,有一定参考价值
下载链接: F1C100S.pdf
页次: 1