WhyCan Forum

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132 (挖坑网/填坑网) admin@whycan.cn

您尚未登录。

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

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

连续多个晚上熬夜,终于搞定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
累计积分: 8,175

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
累计积分: 163

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

牛逼,强啊

离线

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

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

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
累计积分: 26

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

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

离线

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

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

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

三哥 说:

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

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

离线

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

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

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

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

离线

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

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

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
累计积分: 8,175

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

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

离线

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

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

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

晕哥说得对

离线

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

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

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

QQ20180819181552.png

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

离线

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

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

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
累计积分: 581

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

晕哥 说:

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

离线

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

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

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
累计积分: 581

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
累计积分: 581

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
累计积分: 26

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

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

离线

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

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

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

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

离线

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

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

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

受教了。谢谢

离线

#25 2019-10-29 18:09:28

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

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

大哥,你的mksunxi.c怎么编译呀?编译后是不是exe文件呀

离线

#26 2019-10-29 18:58:52

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

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

三哥 说:

大哥,你的mksunxi.c怎么编译呀?编译后是不是exe文件呀

windows用mingw/msvc都可以

离线

#27 2019-10-30 10:24:51

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

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

谢谢!,搞好了



mksun.png

离线

#28 2019-10-30 10:33:30

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

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

说一下步骤吧,也可能后面有入坑的


windows下:

1.拷贝mingw到随便一个文件夹,记住路径...
2.在我的电脑右击......,设置环境变量(加入;.../bin)
3.打开控制台,输入gcc -v回车,如果显示mingw版本说明已经OK了
4.进入xxx.c文件目录
5.输入gcc xxx.c -o yyy回车,(yyy是生成exe文件的文件名)
6.到此yyy.exe便出现在xxx.c文件目录下

最近编辑记录 三哥 (2019-10-30 10:41:06)

离线

#29 2019-10-30 10:39:58

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

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

感谢 @三哥 分享心得。

离线

#30 2019-10-30 14:16:07

gui401
会员
注册时间: 2019-10-25
累计积分: 8

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

@三哥 这个exe文件用来干嘛的?

离线

#31 2019-10-30 15:18:56

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

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

gui401 说:

@三哥 这个exe文件用来干嘛的?

给编译出来的 spl 加魔术头用的,

brom 会先检查魔术头, 合规才会继续加载 spl 到 ram

离线

#32 2019-10-30 15:55:37

gui401
会员
注册时间: 2019-10-25
累计积分: 8

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

晕哥 说:
gui401 说:

@三哥 这个exe文件用来干嘛的?

给编译出来的 spl 加魔术头用的,

brom 会先检查魔术头, 合规才会继续加载 spl 到 ram

新手表示越来越蒙了,不是把生成的bin文件下载到flash就行了吗?还有spl又是什么东东?具体怎么操作呢?感觉我是不是跳过了一些入门贴。。。

离线

#33 2019-10-30 16:42:49

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

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

gui401 说:
晕哥 说:
gui401 说:

@三哥 这个exe文件用来干嘛的?

给编译出来的 spl 加魔术头用的,

brom 会先检查魔术头, 合规才会继续加载 spl 到 ram

新手表示越来越蒙了,不是把生成的bin文件下载到flash就行了吗?还有spl又是什么东东?具体怎么操作呢?感觉我是不是跳过了一些入门贴。。。

这不是单片机那样直接从flash执行就可以。bin的头要放一些信息,让芯片内部的brom程序知道你需要加载多少代码去SRAM去执行。最终你是需要在dram中执行代码的,所以这段代码还得实现加载真正的APP程序到dram去。所以总共需要二次加载。spl就是second program loader

离线

页脚