主要改动:
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.zip
最近编辑记录 达克罗德 (2018-07-13 10:13:52)
离线
感谢分享!
离线
牛逼,强啊
离线
加了MMU的支持,开cache,并把拷贝代码放到DRAM,使得image从SPI复制到DRAM时间减少到原来的60%。但是最初从SPI加载boot代码到SRAM这个时间400ms,实在是太慢了,谁知道怎么减少这个时间。。。
我裸奔就是想实现快速启动系统,如果这加载时间就这么长,那还不如直接上Linux。。。
离线
感谢分享!学习学习。
离线
这帖子可以呀,求大神QQ号
离线
这帖子可以呀,求大神QQ号
我平常不上Q呀,有什么问题在论坛提出来,大家都可以帮忙
离线
我调了两个月裸机串口 一直直接用论坛的串口驱动代码 后来想了一下不对啊 忐忑了一下 会不会引脚不一样啊 结果一看...
离线
我调了两个月裸机串口 一直直接用论坛的串口驱动代码 后来想了一下不对啊 忐忑了一下 会不会引脚不一样啊 结果一看...
哈哈,刚拿到板子时我也是死活看不到串口打印,直到看进去code才发现
离线
@达克罗德
此款的环境是怎样的?需要安装哪些软件?
离线
晕哥说得对
离线
离线
里面还有好多文件是不必要的,还可以精简
离线
刚刚烧录进去, 串口接上 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;
}
离线
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驱动的是另一个帖子里有上传
离线
可以在 main.c 点亮屏幕吗?
离线
可以在 main.c 点亮屏幕吗?
https://whycan.cn/t_1457.html
这里的代码有main函数里直接亮屏的
离线
这个,太好了,非常感谢!
离线
用yagarto也可以吧,你这个代码应该没有涉及linux内核
离线
安装yagarto,使用命名控制台make
离线
受教了。谢谢
离线
大哥,你的mksunxi.c怎么编译呀?编译后是不是exe文件呀
离线
谢谢!,搞好了
离线
说一下步骤吧,也可能后面有入坑的
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)
离线
@三哥 这个exe文件用来干嘛的?
离线
gui401 说:@三哥 这个exe文件用来干嘛的?
给编译出来的 spl 加魔术头用的,
brom 会先检查魔术头, 合规才会继续加载 spl 到 ram
新手表示越来越蒙了,不是把生成的bin文件下载到flash就行了吗?还有spl又是什么东东?具体怎么操作呢?感觉我是不是跳过了一些入门贴。。。
离线
晕哥 说:gui401 说:@三哥 这个exe文件用来干嘛的?
给编译出来的 spl 加魔术头用的,
brom 会先检查魔术头, 合规才会继续加载 spl 到 ram
新手表示越来越蒙了,不是把生成的bin文件下载到flash就行了吗?还有spl又是什么东东?具体怎么操作呢?感觉我是不是跳过了一些入门贴。。。
这不是单片机那样直接从flash执行就可以。bin的头要放一些信息,让芯片内部的brom程序知道你需要加载多少代码去SRAM去执行。最终你是需要在dram中执行代码的,所以这段代码还得实现加载真正的APP程序到dram去。所以总共需要二次加载。spl就是second program loader
离线
开始玩F1C100s了,也是裸奔,自己写外设库函数,写的好恼火!!!
离线
问一下,中断向量表在那一步设置。
离线
怎么玩 怎么玩
离线
感谢分享!
离线
主要改动:
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似乎发现这个问题,有了更新,我准备试一试。
最近想撸f1c100s,看了些相关大神们的贴,怎么xboot的f1c100s.ld里的ram首址不是0x1 0000呢,而是0x80000000,DRAM不是要SRAM运行的程序来初始化后才能用的么,想把它当单片机用。
最近编辑记录 啊呆 (2020-02-01 19:13:45)
离线
厉害
离线
感谢分享!
离线
感谢分享!学习学习
离线
大佬就是牛逼!学习学习,哈哈。
离线
感谢分享
离线
现在下载都这么困难了吗,新手发不了精华帖啊,晕哥可以收费下载啊
离线
厉害
离线
太优秀了。。。只有70个文件,跟着大佬学习F1C100s,买了板子感觉无处着手。。。
离线
牛逼!学习学习,今天刚入手,也加入学习队伍
离线
厉害啦,又有东西可以搞了,牛人牛逼。
离线
怎么我的账号突然就不能用了,找回密码,提示我邮箱没注册。又重新注册了
离线
厉害了,参照大佬资料学习
离线
在win10下有开发环境吗?
离线
楼主牛B...
离线
感谢达克罗德提供的代码,我在这基础上已移植到KEIL上了,可以用JLINE DEBUG。
离线
能运行哪些服务
离线
楼主能否分享一下细节
离线
@kingmooth 这个用jink调试的方法可以分享一下吗?
离线
感谢楼主的分享,正需要这个。
离线
感谢高手分享!
离线
开始玩F1C100s了,也是裸奔,感谢楼主的分享,正需要这个!!!
离线
感谢分享 学习了!~~
离线
牛逼牛逼最近在学f1c100s,学习到了。
离线
才发现 f1c100s 这么价廉,也想用这个来学习 ARM9 裸奔。看了这里的多个帖子,还是不太明白怎么动手。
离线
这芯片这么牛逼,价格这个低,如果多一些裸奔,完全可以干死单片机呀
离线
刚开始接触nuc972 ,就发现f1c100s,是不是上错船了???
离线
Hi guys, is there such a code for V3S?
Or an example of bare metal for lichee Pi Zero?
离线
One more question:
How can I run the elf file directly from boot.scr settings, or is it not possible?
If there was an example, I would be very grateful.
离线
刚到手的板子正准备尝试跑起来测试一下
离线
这个 Bootloader 部分可以直接用来启动 Linux 吗?
离线
应该不行 这个裸奔的
离线
这个F1C100S裸奔(从SPI Flash启动)很给力啊,值得学习
离线
刚入手荔枝派nano,还不知道怎么把bin文件烧录的FLASH中,可以通过USB下载吗,还是把FLASH拆下来单独烧录。
离线
新到的荔枝派nano, 还不知道怎么烧写flash
离线
开始玩F1C100s了,也是裸奔,自己写外设库函数,写的好恼火!!!
你好,你的启动文件是自己写的吗,可以分析一下吗
离线
今天刚到手荔枝派,自己仿照mksunxiboot写了一个下载到sd卡的程序,但BROM总是给我引导到SPIFlash自带的uboot里面。。头疼了,回复一下拿个下载权限,看看大佬是怎么写的
离线
从入门到F1C100都有任何教程吗
离线
在网站下载了mksunxi.exe文件,但还不知道怎么给bin文件加相关头信息,checksum部分是0x00000000
离线
感谢达克罗德提供的代码,我在这基础上已移植到KEIL上了,可以用JLINE DEBUG。
可以分享下具体的移植过程吗?
离线
主要改动:
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似乎发现这个问题,有了更新,我准备试一试。
请问keil5中如何设置BROM程序的实际大小啊,我填固定长度比实际代码大,checksun每次都不一样
离线
kingmooth 说:感谢达克罗德提供的代码,我在这基础上已移植到KEIL上了,可以用JLINE DEBUG。
可以分享下具体的移植过程吗?
可以参https://whycan.com/t_1527.html这个帖子
最近编辑记录 sea18c (2020-11-12 10:26:07)
离线
谁有jtag下载spi的算法,像stm32一样下载
离线
谢谢分享啊
离线
感谢分享,晕哥的网站里面开源的大神真多
离线
离线
后来试了RTT+LVGL7裸奔的程序里面的SPL,原始代码的话启动比较慢,把MMU用起来之后启动飞快,1秒不到就可以启动完RTT,这个好
离线
离线
刚开始接触nuc972 ,就发现f1c100s,是不是上错船了???
我一开始想入门linux,就用NUC977的,后来NUC977也做了板子,SD卡也可以用,屏幕就亮了一次,后来资料太少了就弃坑了。转玩全志系列
离线
不过我还是想知道NUC977与V3S哪个稳定
离线
达克罗德大佬:这个示例能给mangopi r3用吗?我已经刷好了,但是在UART0上接上串口转接卡,无法看到输出字符“A”。
最近编辑记录 jpglcdk (2021-07-22 15:36:17)
离线
达克罗德大佬:这个示例能给mangopi r3用吗?我已经刷好了,但是在UART0上接上串口转接卡,无法看到输出字符“A”。
https://gd4.alicdn.com/imgextra/i4/479269519/O1CN01GTb4S02KBkpY6rcjS_!!479269519.jpg_400x400.jpg
应该能用的,你接的是UART0 是GPIOE1 and GPIOE0吗?
离线
@达克罗德
我是用的pe0(uart0 rx)和pe1(uart0 tx)。
今天重新将全部重做一遍。但现象依旧。
1,virtual box中安装mint系统(幸好mint也是基于ubuntu发布,与ubuntu使用相同的源)。
2,按照晕哥大佬说的,安装软件源上的gcc-arm-none-eabi,版本:15:9-2019-q4-0ubuntu1
3,编译工程,因为mksunxi没有添加执行属性,于是手工添加。然后重新clean和make
编译成功,显示:
bootloader size = 1600
The bootloader head has been fixed
4,直接使用官网发布的sunxi(https://mangopi.org/_media/mpi-r-tools.zip),进入fel模式,在windows系统中刷机:
C:\code\mpi-r-tools>sunxi-fel -p spiflash-write 0 firmware.bin
100% [================================================] 6 kB, 57.2 kB/s
5,reset按钮重启,然后uart0没有输出,TTL的usb口也没有输出。
对arm汇编和xboot不熟,也不知道是出了什么事。
最近编辑记录 jpglcdk (2021-07-23 11:14:33)
离线
厉害厉害,感谢分享!
离线
@jpglcdk
确定sys-uart.c里sys_uart_init部分是初始化的PE0/1串口否。
离线
@jpglcdk
确定sys-uart.c里sys_uart_init部分是初始化的PE0/1串口否。
是的,采用的是UART0
/* Config uart0 to 115200-8-1-0 */
addr = 0x01c25000;
离线
大佬我问个低级的问题:
mangopi刷好后是怎么选择从刷入的这个裸机程序启动的?
我刷完这个裸机程序后重启(点击reset按钮或者断电后重新给电),都是进入原先刷入的linux系统。
离线
大佬我问个低级的问题:
mangopi刷好后是怎么选择从刷入的这个裸机程序启动的?
我刷完这个裸机程序后重启(点击reset按钮或者断电后重新给电),都是进入原先刷入的linux系统。
优先SD卡启动,所以你要确保SD卡没东西或者拔掉SD卡
另外是不是没有烧成功成功到norflash?你的Linux系统是烧到norflash的吗?
离线
@jpglcdk
你烧的是build目录下的bin文件吗?
离线
@jpglcdk
你烧的是build目录下的bin文件吗?
SD卡没有插。
我是按照官网上刷nor flash的方法刷的:
sunxi-fel -p spiflash-write 0 XXX.bin
刷的过程中进度条也拉满到100%了,中间没看到有什么报错信息。因为文件比较小,所以很快,一下子就刷完了。
我重编的linux镜像,官网上说只能使用DFU刷入NAND flash。我都是用dfu utility刷linux镜像,没有用sunxi-fel刷linux镜像过。nand flash方式是刷成功了linux,也能够重启进入root用户的。
我用nor flash方式刷的是build目录下的firmware.bin文件。
难道是因为这块板子是R3版本的原因,硬件已经变化了?
离线
@jpglcdk
nandflash?sunxifel应该不支持nandflash吧?即使sunxifel支持nand,我这个裸奔代码也不支持从nandflash启动,它的引导部分是从spi nor读代码到ddr
离线
想让这个裸奔代码能从nand启动,你需要改从flash读代码那一段
离线
想让这个裸奔代码能从nand启动,你需要改从flash读代码那一段
问题大概确定了,R3版可能没有nor flash,官网上写着如果是nor flash则是一块winbond芯片,而且说板子的flash要么是nor要么是nand。r3很可能是nand flash,所以启动不了就可以解释了。
离线
离线
大佬,我在看你的mksunxi.c这个文件,发现一个地方我不理解,在89行,checksum这个变量是被赋值成了0x5F0A6C39。后面进行累加校验,然后在94行,checksum被直接赋值成了sum,也就是累加校验和。89行赋值语句不就没有起作用了吗。
所以我想知道这个应该怎么理解。
离线
看的即兴奋又蒙圈, 大牛多啊, 现在新学单片机, 多久能达到这个高度?需要些其他什么知识储备?
离线
离线
离线
离线
程序输出了"Boot to FEL mode"就卡死了不知道是原因,编译工具gcc-linaro-7.5.0-2019.12-x86_64_arm-eabi,可能是最高版本了吧
离线
看了楼主的贴子受益匪浅!但是有下面代码
h = (struct boot_head_t *)buffer;
p = (uint32_t *)h;
h->length = ALIGN(h->length, BLOCK_SIZE);//align block size
l = le32_to_cpu(h->length);
h->checksum = cpu_to_le32(0x5F0A6C39);
loop = l >> 2;
printf("bootloader size= %x\n", h->length);
for(i = 0, sum = 0; i < loop; i++)
sum += le32_to_cpu(p[r]);
h->checksum = cpu_to_le32(sum);
其中的h->checksum = cpu_to_le32(0x5F0A6C39);
这说明应该是前面有什么文件内容的校验sum吧,有朋友知道是什么文件吗?
离线
想要裸奔,但还在一脸懵
1)JTAG不能下载,下载出现如下信息,后面尝试将RESET接到JLINK试试
Load "D:\\maojing\\hdy-radio\\f1c100s_keil-master\\F1C100S\\Obj\\SRAM\\f1c100s.axf"
ProjectFile = D:\maojing\hdy-radio\f1c100s_keil-master\F1C100S\JLinkArm_sram.ini
Device = AT91SAM9261
Info: Device "AT91SAM9261" selected (0 KB flash, 32 KB RAM).
VTarget = 3.267V
Info: TotalIRLen = 4, IRPrint = 0x01
Info: CP15.0.0: 0x41069265: ARM, Architecure 5TEJ
Info: CP15.0.1: 0x1D152192: ICache: 32kB (4*256*32), DCache: 16kB (4*128*32)
Info: Cache type: Separate, Write-back, Format C (WT supported)
Info: RTCK is not connected
Info: Auto JTAG speed: 8000 kHz
Info: J-Link: ARM9 CP15 Settings changed: 52078 from 78, MMU Off, ICache Off, DCache Off
***JLink Warning: RESET (pin 15) high, but should be low. Please check target hardware.
***JLink Warning: PC of target system has unexpected value of 0xFFFF01E0 after reset.
Info: CP15.0.0: 0x41069265: ARM, Architecure 5TEJ
Info: CP15.0.1: 0x1D152192: ICache: 32kB (4*256*32), DCache: 16kB (4*128*32)
Info: Cache type: Separate, Write-back, Format C (WT supported)
DLL version V4.50l, compiled Jul 9 2012 15:02:49
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46
Hardware: V8.00
Hardware-Breakpoints: 2
Software-Breakpoints: 8192
Watchpoints: 0
Found 1 JTAG device, Total IRLen = 4:
Id of device #0: 0x07926F0F
ARM9 identified.
JTAG speed: 1000 kHz
***JLink Warning: RESET (pin 15) high, but should be low. Please check target hardware.
***JLink Warning: PC of target system has unexpected value of 0xFFFF0294 after reset.
Info: CP15.0.0: 0x41069265: ARM, Architecure 5TEJ
Info: CP15.0.1: 0x1D152192: ICache: 32kB (4*256*32), DCache: 16kB (4*128*32)
Info: Cache type: Separate, Write-back, Format C (WT supported)
JTAG speed: 1000 kHz
No Algorithm found for: 00000000H - 00001C47H
Erase skipped!
Error: Flash Download failed - ARM926EJ-S
Flash Load finished at 15:32:35
2)插入USB电脑没如何反应,无论FLASH的CS是否短路到地
请教高手
从哪里看程序是下载到哪里的(SRAM或其他)?
离线
@qrfqrx mksunxi.c
这个文件在哪里可以下载呢
离线
这个是用的什么编译器
离线
感谢大佬,让小白有勇气去尝试!
离线
@达克罗德
uboot的镜像挖出来的,
https://whycan.com/files/members/10011/08 093322.jpg
.global _start
_start:
/* Boot head information for BROM */
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0 /* 0x40 - boot params, 0x58 - fel boot type, 0x5c - dram size */
_vector:
这个是xboot里面的头,后面好多0没有处理,
图里面0x20位置这个数据 0x2C 从哪儿来的一直没找到,怎么添加
离线
这个F1C100S裸奔(从SPI Flash启动)很给力啊,值得学习。
刚到一块带屏的F1C100S板,学习中。
离线
正在弄F1C200S,用的是稚辉君的板子,然后自己改了一下,
离线
各位大佬,请教一个问题,我买的板子上面带的是spi nand flash,直接用sunxi-fel 烧keil编译出来的 bin 进去启动不起来,烧例程的img文件可以启动,请问怎样把bin转成可以启动的img文件,调了好几天了也不行,救命啊~~~~
离线
谢谢分享,学到不少,BIN文件不能直接烧录???sunxi-fel.exe启动不了
离线
楼主有没有兴趣搞下裸机usb host,感觉usb host是不是必须上os
离线
楼主启动应用镜像要多久?有没有dma启动方式?
离线
请问在哪里可以下载到mksunxi.exe,难怪我下载裸机程序到spi中,还是运行不了。
离线
厉害,请问工程能不能在其他地方下载,github或者百度网盘
离线
在网站下载了mksunxi.exe文件,但还不知道怎么给bin文件加相关头信息,checksum部分是0x00000000
直接就是mksunxi4u.exe xxx.bin,然后就会直接修改xxx.bin,加头
离线
是什么开发环境?
离线
这个需要先烧一个uboot启动吗?萌新,轻点骂😭
离线
今天刚到手荔枝派,自己仿照mksunxiboot写了一个下载到sd卡的程序,但BROM总是给我引导到SPIFlash自带的uboot里面。。头疼了,回复一下拿个下载权限,看看大佬是怎么写的
离线
最近捡到一个大彩屏(F1C600S),准备跑rtthread,正在到处找启动文件,先学习一下。
离线