WhyCan Forum

本站无需注册,无需积分,无需回复可下载所有资料,如果真的喜欢小站,请您注册之后请至少回复一个帖子激活Id,谢谢支持! 站长QQ: 516333132 (挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2018-07-13 10:08:59

达克罗德
会员
注册时间: 2018-04-10
累计积分: 523

连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

主要改动:
1. 从XBOOT剥离出来基本ARCH和Machine的boot代码以及Makefile
2. 修改了mksunx tool,解决了文件小于0x3C00时的BROM checksum错误。
3. 修改link文件增加bootloader section,修改start.S自动计算启动代码长度,这样只加载bootloader到RAM,加快启动
3. 把UART0 TX/RX改为GPIOE1 and GPIOE0, 方便调试

Todo:
1. 增加GPIO,PWM和中断支持,已经有网友实现了,准备加进来
2. 从XBOOT主线同步最新启动代码,主线已经增加了MMU支持(打开I、DCache),并且对启动代码优化了速度

用法:
1. 首先编译mksunxi:make mktool 或者 cd tools/mksunxi && make
2. 编译firmware.bin: make
3. 烧到SPI flash:make write

我遇到的最大的坑是,原来BROM里填的固定加载0x3C00长度,而我的minimal代码总共才1xxx bytes,导致checksum错误。后来用官方的mksunxiboot工具,虽然可以识别BROM但是,一跳到DRAM执行main就reset。一看代码,有个DRAM检查0x5C位置的信息,不知道为什么要检查这个,但估计是mksunxiboot没处理这个导致DRAM没有初始化好。最后还是用xboot的mksunxi改了下终于好了。

另外发现SRAM代码跑得很慢,加载几k代码到RAM用了1xxms,虽然是3M的clock但是发现有很多间隔;后来copy SPI全部代码到DRAM,50M时钟也用了几MS,也有很多等待,平均只有1/3的有效速度。XBOOT似乎发现这个问题,有了更新,我准备试一试。

minmal_f1c100s

最近编辑记录 达克罗德 (2018-07-13 10:13:52)

离线

#2 2018-07-13 12:15:54

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,979

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

厉害厉害,感谢分享!

离线

#3 2018-07-13 15:31:01

arphone
会员
注册时间: 2017-11-03
累计积分: 63

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

感谢分享!

离线

#4 2018-07-14 10:10:25

lcfmax
会员
注册时间: 2018-04-13
累计积分: 158

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

牛逼,强啊

离线

#5 2018-07-15 00:38:45

达克罗德
会员
注册时间: 2018-04-10
累计积分: 523

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

加了MMU的支持,开cache,并把拷贝代码放到DRAM,使得image从SPI复制到DRAM时间减少到原来的60%。但是最初从SPI加载boot代码到SRAM这个时间400ms,实在是太慢了,谁知道怎么减少这个时间。。。
我裸奔就是想实现快速启动系统,如果这加载时间就这么长,那还不如直接上Linux。。。

离线

#6 2018-07-16 14:51:52

kaokao
会员
注册时间: 2018-06-06
累计积分: 30

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

感谢分享!学习学习。

离线

#7 2018-08-07 08:38:19

三哥
会员
注册时间: 2018-08-03
累计积分: 13

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

这帖子可以呀,求大神QQ号

离线

#8 2018-08-07 11:20:48

达克罗德
会员
注册时间: 2018-04-10
累计积分: 523

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

三哥 说:

这帖子可以呀,求大神QQ号

我平常不上Q呀,有什么问题在论坛提出来,大家都可以帮忙

离线

#9 2018-08-15 15:59:51

Jin劲
会员
注册时间: 2018-04-06
累计积分: 188

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

我调了两个月裸机串口 一直直接用论坛的串口驱动代码 后来想了一下不对啊 忐忑了一下 会不会引脚不一样啊 结果一看...

离线

#10 2018-08-15 17:38:48

达克罗德
会员
注册时间: 2018-04-10
累计积分: 523

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

Jin劲 说:

我调了两个月裸机串口 一直直接用论坛的串口驱动代码 后来想了一下不对啊 忐忑了一下 会不会引脚不一样啊 结果一看...

哈哈,刚拿到板子时我也是死活看不到串口打印,直到看进去code才发现

离线

#11 2018-08-19 14:31:19

nhztb
会员
注册时间: 2017-12-06
累计积分: 3

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

@达克罗德
此款的环境是怎样的?需要安装哪些软件?

离线

#12 2018-08-19 16:43:33

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,979

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

和 xboot 一样, ubuntu 下装好 arm-*-linux-gcc, 然后执行make 即可生成bin。

离线

#13 2018-08-19 17:16:02

达克罗德
会员
注册时间: 2018-04-10
累计积分: 523

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

晕哥说得对

离线

#14 2018-08-19 18:16:55

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,979

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

QQ20180819181552.png

太优秀了,只有70个文件.

离线

#15 2018-08-19 18:36:04

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,979

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

ubuntu执行:

sudo apt-get install gcc-arm-none-eabi

修改 Makefile

CROSS_COMPILE = arm-eabi-

改为

CROSS_COMPILE ?= arm-eabi-

编译:

CROSS_COMPILE=arm-none-eabi- make

离线

#16 2018-08-19 19:08:40

达克罗德
会员
注册时间: 2018-04-10
累计积分: 523

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

晕哥 说:

里面还有好多文件是不必要的,还可以精简

离线

#17 2018-08-19 19:52:44

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,979

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

QQ20180819194823.png

刚刚烧录进去, 串口接上 PE0, PE1, 满屏都是 AAA, 还以为我的串口坏了。

重烧了几次还是一样,

打开 main.c 源码一看,原来是这样:

#include <stdint.h>
#include <stdio.h>
#include <string.h>

extern void sys_uart_putc(char c);

int boot_main(int argc, char **argv) {

    while(1)
    {
        sys_uart_putc('A');
    }
    return 0;
}

离线

#18 2018-08-19 20:37:03

达克罗德
会员
注册时间: 2018-04-10
累计积分: 523

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

晕哥 说:

https://whycan.cn/files/members/3/QQ20180819194823.png

刚刚烧录进去, 串口接上 PE0, PE1, 满屏都是 AAA, 还以为我的串口坏了。

重烧了几次还是一样,

打开 main.c 源码一看,原来是这样:

#include <stdint.h>
#include <stdio.h>
#include <string.h>

extern void sys_uart_putc(char c);

int boot_main(int argc, char **argv) {

    while(1)
    {
        sys_uart_putc('A');
    }
    return 0;
}

这是刚能跑时的代码,带PWM,GPIO和Framebuffer驱动的是另一个帖子里有上传

离线

#19 2018-08-19 20:37:29

志文
会员
注册时间: 2018-08-09
累计积分: 7

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

可以在 main.c  点亮屏幕吗?

离线

#20 2018-08-19 20:50:38

达克罗德
会员
注册时间: 2018-04-10
累计积分: 523

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

志文 说:

可以在 main.c  点亮屏幕吗?

https://whycan.cn/t_1457.html
这里的代码有main函数里直接亮屏的

离线

#21 2018-08-19 20:53:33

志文
会员
注册时间: 2018-08-09
累计积分: 7

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

这个,太好了,非常感谢!

离线

#22 2018-08-20 17:45:33

三哥
会员
注册时间: 2018-08-03
累计积分: 13

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

用yagarto也可以吧,你这个代码应该没有涉及linux内核

离线

#23 2018-08-20 17:46:37

三哥
会员
注册时间: 2018-08-03
累计积分: 13

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

安装yagarto,使用命名控制台make

离线

#24 2019-07-11 08:51:22

hzpyl
会员
注册时间: 2019-07-10
累计积分: 58

Re: 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动)

受教了。谢谢

离线

页脚