您尚未登录。

#2 Re: 全志 SOC » Bare metal USB-host example (F1C100S) » 2024-07-20 10:26:04

楼主,我用了你的代码,读U盘时卡在这里,能帮忙看一下是什么问题不?谢谢
bulk_in()函数里面,执行wait_csr()时一直不能返回

FluxBB bbcode 测试

#4 全志 SOC » musb编程指南中文版 » 2024-05-31 16:27:43

三哥
回复: 4

继乌克兰大神搞定f1c100s的裸奔usb主机之后我借网络工具翻译了musb编程指南供大家参考,文件在这里:musb_programming_guide(译文).pdf

#6 全志 SOC » f1c200s裸机i2c驱动GT911触摸 » 2024-02-17 22:17:37

三哥
回复: 2

不说了,上代码吧!希望对正在找的同志有点用,含usb,SDIO等。gt911.zip

#11 Re: 全志 SOC » 一条龙分享基于tiny200 r3(f1c200s)板子的bootloader固件+多进程多线程OS镜像+APP开发模板,欢迎下载玩它 » 2022-04-21 14:08:30

@LinjieGuo


加载用户APP的详细准备工作代码如下:


void * LoadBin(char * buf, int vir_offset, char * file_start, process * pro)//vir_offset填0
{
    void * stack;

    app_hdr * phdr;
    uint32_t vir_start;
    int page;


    CopyFile(buf, 0, file_start, 0, sizeof(app_hdr));

//    spl_print32((u32)(file_start));spl_prints(" \r\n \r\n", 0);
//    show_data((void*)buf);

    phdr = (void*)buf;
    vir_start = (phdr->load_addr) >> 20;

    if(0x2e617070 != phdr->magic) return (void*)0xffffffff;


    //准备虚拟空间
    //需要适应phdr->load_addr - phdr->stack虚拟地址段
    page = ((phdr->stack) >> 20) - (vir_start) + 1;//计算页数
    while(page --)
    {

        PagePrepare(pro, vir_start << 20);
        //拷贝映射关系到临时页表
        *(Get_pgt_base(-1) + (int32_t)(vir_start)) = *(Get_pgt_base(pro->id_pro) + (int32_t)(vir_start));
        vir_start ++;
    }


    //拷贝代码
    vir_offset = 0;//这个使用0很有必要

    CopyFile((char*)(phdr->load_addr), vir_offset, file_start, phdr->code_offset, phdr->code_size);


    //清bss
    FillData((char*)phdr->bss_addr, 0, phdr->bss_size);



    //准备堆栈数据
    stack = StackAlign((void*)(phdr->stack));
    PrepareStack(stack, (void*)phdr->entry);


    return stack;
}

#12 Re: 全志 SOC » 一条龙分享基于tiny200 r3(f1c200s)板子的bootloader固件+多进程多线程OS镜像+APP开发模板,欢迎下载玩它 » 2022-04-21 14:05:57

@LinjieGuo


大佬的疑问2答案如下:


我的内核有进程/线程间通信模块,如:共享内存、管道、sem、mutex、SpinLock、SleepLock等等,只不过我现在没有以syscall方式提供出来,用户处在ARM的usr模式是不能调用的,因为启用了MMU并设置了访问权限,用户直接调用会导致异常,正常情况是要以syscall方式提供给用户使用的。

#13 Re: 全志 SOC » 一条龙分享基于tiny200 r3(f1c200s)板子的bootloader固件+多进程多线程OS镜像+APP开发模板,欢迎下载玩它 » 2022-04-21 13:59:22

@LinjieGuo


大佬你好!你的疑问1答案如下:

loader在运行os之前已为os部署好了虚拟环境,当然os在运行过程中也有部署虚拟环境的能力,各用户进程虚拟地址空间是严格分开的,loader中相关部署代码如下


uint32_t fill_table(void)
{

    uint32_t* base_addr;

    base_addr = (uint32_t*)PAGE_TABLE_ADDR;//第一个内核进程的页表地址//?物理地址,(至少16k对齐)


    //4G空间全部归0(不可访问),页表项全0会产生错误

    InitPageTable(base_addr);



    // 起始向量表在此,第一阶段代码在此CNB,SRAM处物理和虚拟地址均可回收
    map_l1_section(base_addr, 0x00000000, 0x00000000, 1 * SIZE_1M, PRI_RW_USR_RW, USE_CACHE);

    // SDRAM空间,CB
    map_l1_section(base_addr, 0xc0000000, 0x80000000, 16 * SIZE_1M, PRI_RW_USR_NOT, USE_CACHE|USE_BUFFER);


    //任务SP、显示缓冲区放在用户空间


    //内核堆栈、向量
    map_l1_section(base_addr, 0xfff00000, 0x83f00000, 1 * SIZE_1M, PRI_RW_USR_NOT, USE_CACHE);
    //页表
    map_l1_section(base_addr, 0xffc00000, 0x83c00000, 3 * SIZE_1M, PRI_RW_USR_NOT, USE_CACHE);

    map_l1_section(base_addr, 0xff900000, 0x01e00000, 1 * SIZE_1M, PRI_RW_USR_NOT, 0);   // 外设
    map_l1_section(base_addr, 0xff800000, 0x01c00000, 1 * SIZE_1M, PRI_RW_USR_NOT, 0);   // 外设



    return (uint32_t)base_addr;

    /*
     * 虚拟地址0xffc00000-0xfff00000   对应物理地址0x83c00000-0x83f00000       存放页表+内核栈、向量表(其中内核栈、向量表在最后一页)
     *
     *虚拟地址0xff800000-0xffb00000 分给外设使用
     *
     *虚拟地址0xc0000000开始分给内核代码+内核堆使用
     */
}

#14 Re: 全志 SOC » 自制PCB/KEIL MDK/JLINK裸奔F1C100S,一步一步填坑 » 2022-04-21 12:41:56

帖子不错,没看到你的板子呀,还有哪些坑?继续观望

#15 Re: 全志 SOC » 一条龙分享基于tiny200 r3(f1c200s)板子的bootloader固件+多进程多线程OS镜像+APP开发模板,欢迎下载玩它 » 2022-04-21 12:03:59

lanlanzhilian 说:

断电重启后需要重新下载OS吗,略麻烦


你也可以用常规方法通过USB口将arm9os.bin下载到spiflash的0x8000处,这样就固化了。我自己是因为要一直更新OS,一直在调试OS,所以保存OS到spiflash的功能没打开,其实我的OS有个头,当其中某字段设为1(该字段决定OS自己是否被保存)时,loader发现这个1,就会保存OS到spiflash。头如下:


    typedef struct {//  80字节
        uint32_t    magic;            // 文件标记0x27190556
        uint32_t    struct_size;      // 自身尺寸
        uint32_t    entry;            // 程序入口

        uint32_t    kernel_addr;    // header的加载地址
        uint32_t    kernel_size;         // header的长度
        uint32_t    kernel_crc;          // header的校验值

        uint32_t    bss_addr;    // BSS地址
        uint32_t    bss_size;       // BSS大小
        uint32_t    isr_addr;         // 中断服务程序地址数组首地址
        uint32_t    isr_nbr;          // 地址个数

        uint32_t    rsv1;              // 保留(最低位为1表示程序加载到SDRAM之后还要烧到spi flash)
        uint32_t    rsv2;              // 保留

        uint8_t     name[32];         // 字符串


    } kernel_header_t;

#16 Re: 全志 SOC » 一条龙分享基于tiny200 r3(f1c200s)板子的bootloader固件+多进程多线程OS镜像+APP开发模板,欢迎下载玩它 » 2022-04-21 10:18:01

注意先下载APP,再下载OS,每个APP下载一次即可,他们是保存在spiflash中的;OS是直接下载到SDRAM运行的,掉电就消失了。可以修改APP模板编译出不同的APP下载进去,串口观察APP运行情况。该OS有强制线程调度能力,以免用户忘记自主放弃CPU,其他线程不能运行;线程可以分别像写裸机程序一样,系统自动为他们并行运行,无感知并行。

#17 全志 SOC » 一条龙分享基于tiny200 r3(f1c200s)板子的bootloader固件+多进程多线程OS镜像+APP开发模板,欢迎下载玩它 » 2022-04-21 09:38:29

三哥
回复: 8

事情是这样的:随着大家都在玩f1c100s,作为一直玩GUI的我也注意到了该芯片,性价比比较高适合驱屏,该芯片CPU内核为ARM9,刚好是我比较熟悉的核,自己写的GUI一直用ucos在树莓派上跑,ucos我玩了太多年了,也翻译过ucos的代码,毕竟这个os并不免费,只能作为学习用途。单纯的多线程OS玩了太久,最近萌生了要自己写个多进程多线程OS,于是在网上搜集整理相关资料,感谢前辈们无私奉献、辛苦踩坑,尤其是xboot这样的大佬,以及其他一系列的大佬(不一一点名),最终它来了:基于tiny200 r3(f1c200s)板子的bootloader固件+多进程多线程OS镜像+APP开发模板。


        大家都知道OS这个玩意相当复杂,请允许我详细介绍玩它的步骤,对,就是玩它...玩它...玩它...,详细步骤如下:
        1、用传统方法通过usb口烧写boot.bin到spiflash的0x0位置;
        2、用传统方法通过usb口烧写loader.bin到spiflash的0x3000位置;
        3、注意因为loader有串口下载功能,完成以上两步之后,就再也不需要从usb口下载了;
        4、数据线连接tiny200 r3的串口,并连接到电脑,打开串口工具(XCOM),选择正确串口,设置波特率115200;
        5、轻按tiny200的RST键,松开后,迅速通过串口工具发送字符'2'~'6'中的一个,这时进入下载APP模式;
        6、使用串口工具的文件发送功能,选择APP0.bin,点击发送,发送完毕后,该APP就保存到了spiflash中;
        7、重复4到6步可以下载不同的APP,分别选择字符'2'到'6'一共允许下载5个APP到spiflash中;
        8、轻按tiny200的RST键,松开后,迅速通过串口工具发送字符'1',这时进入下载OS模式;
        9、使用串口工具的文件发送功能,选择arm9os.bin,点击发送,发送完毕后,OS开始运行;
        10、使用串口的多条发送功能,发送字符串"run app02",这时OS会加载第一个APP并运行它,如果发送字符串"run app03",这时OS加载第二个APP并运行它,以此类推......

        注释:字符'2'~字符'6'是下载APP的指令,字符'1'是下载操作系统的指令,下载时不要选错文件;"run app"是加载并运行APP的指令。


        相关文件如下:

        串口工具:XCOM V2.0.exe
        boot:boot.rar
        loader:_loader.rar
        arm9os:arm9os.rar
        APP模板:APP0.rar

#18 Re: 全志 SOC » 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。 » 2022-04-18 13:01:42

其实我个人觉得还有个问题需要解决,就是每个芯片id不一样,我们不可能为每个芯片定制一个镜像。为解决这个问题我的思路是:
1、所有的板子下载同一个镜像,该镜像初次运行时,会根据芯片id改变镜像本身的某字段(该字段是ID号暗文,是一个加密过程)。
2、读取ID号,同时读取暗文并转换成明文ID号(解码过程),两者如果不相等表示盗版,如果相等会继续向下执行。
3、如果第二步是相等的,则抹掉镜像中,实现第一步加密的代码段。

第1和3步仅初次运行时执行一次


这样就实现了同一份原始镜像适应所有不同的芯片

#19 全志 SOC » 为了方便玩f1c100s/f1c200s的小伙伴能实现串口下载程序,我自己实现了write—spiflash功能 » 2022-04-07 18:47:57

三哥
回复: 0

为了方便玩f1c100s/f1c200s的小伙伴能实现串口下载程序,我自己实现了write—spiflash功能

代码使用如下:


	p = (kernel_header_t *)0xc0000000;//起始位置放的是程序头

	if(p->rsv1 & 0x1)//判断是否需要将程序存入spiflash
	{
		//从0xc0000000搬到spiflash的0x8000处,然后重新上电运行(方案1)
		sys_spi_flash_init();

		n = size / 4096;//1扇区4k(4096)
		if(size % 4096) n ++;
		cnt = 0;
		while(n --)
		{
			sys_spi_EraseSector(0x8000 + cnt*4096);//根据size计算擦除扇区数
			cnt ++;
		}
		n = size / 256;//1页256字节
		if(size % 256) n ++;
		cnt = 0;
		while(n --)
		{
			sys_spi_WritePage(0x8000 + cnt*256, (void*)0xc0000000 + cnt*256);//根据size计算写入页数
			cnt ++;
		}


		sys_spi_flash_exit();
	}

相关底层代码主要是擦除和写flash,可点击下面链接下载:

spiflash.rar

IAP很方便,不需要每次使用工具从usb口烧写。

祝你使用我的代码很愉快!

#21 Re: Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2022-04-07 12:51:39

凿子树 说:

加个DIY的梯形图编辑器就完美了。

这个没研究

#24 Re: Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2022-04-07 08:55:33

cccsk 说:

这个支持什么型号

忘记了,我是业余的玩玩而已,没有深入。反正指令肯定不全,自己可以添加。下载协议可以了解一下,看看支持啥型号

#26 Re: Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2022-03-10 12:33:09

armstrong 说:

什么是emGE?这界面怎么这么像野火的emXGUI和刘巍的作品呢?


纯属巧合

#28 Re: 全志 SOC » 分享一个自己试着写的裸机BootLoader,和编写过程中的大坑 » 2021-09-01 09:47:21

我也出现设置sp后程序出问题的情况,我启用了MMU,设置sp使用虚拟地址,这个地址映射到DDR物理地址上。但跑这段设置sp的代码程序就飞了

#29 Re: 全志 SOC » 参照论坛资料初步为f1c200s撸的BootLoader » 2021-08-17 13:15:33

又做了一些修改,完美启动

启动信息如下:

1.png

#30 Re: 全志 SOC » 参照论坛资料初步为f1c200s撸的BootLoader » 2021-08-14 17:35:58

使用歪朵拉 tiny200  r3的板子,默认串口uart1打印消息

#32 全志 SOC » 参照论坛资料初步为f1c200s撸的BootLoader » 2021-08-13 11:52:39

三哥
回复: 3

准备自己搞个多进程OS,大伙要不要试试这个loader,我也在测试中,望提宝贵意见

编译方法:

1、使用eclipse打开工程,直接编译生成bin文件
2、编译makesunxi工具
3、使用makesunxi工具对bin文件头部进行处理
4、按照usb下载方法下载loader到spiflash0x000000处
5、新建一个工程,编译下载到spiflash0x100000处


系统上点之后,loader被加载,之后loader初始化硬件,并把你下载到flash的代码前1024字节加载到0x80000000处,并跳到这里。你需要确保跳到0x80000000之后不要跑飞了


loader_r3.rar

#38 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2020-01-02 15:22:14

LinjieGuo 说:

嗯嗯,实在不好意思,因为帖子发出来一阵子之后,无法修改了。


你这话说得,谢谢大佬了

#39 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2020-01-02 15:21:14

由于我不会在linux下烧程序到板子,我都是在windows下操作。所以我找了宿主机和客户机之间互换文件的方法,希望把编译的文件拿倒windows下烧写。具体方法见这个网页: https://www.cnblogs.com/sunev/archive/2012/03/16/2400887.html

#42 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2020-01-02 10:02:32

LinjieGuo 说:

配置好的VM虚拟机Ubuntu系统 链接:https://pan.baidu.com/s/17vk0_QWRNRuxwi5EZ_P-Xg 提取码:54pb



非常感谢楼主,可是这个ubuntu密码多少呀?快哭了

#45 Re: 全志 SOC » 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动) » 2019-10-30 10:33:30

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


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文件目录下

#47 Re: 全志 SOC » 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动) » 2019-10-29 18:09:28

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

#48 Re: Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2019-10-18 09:42:04

csgtli 说:

楼主的程序确实看起来很方便



还在改进和完善中,后面会配合我的emGE(嵌入式图形引擎)做一些工业控制产品。


emGE早期版本运行画面:

FluxBB bbcode 测试

FluxBB bbcode 测试

#50 Re: Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2019-10-17 10:27:21

Gentlepig 说:

是的。尝试看过网上下载的源码,理解比较困难。你这个就简单明了些。


估计是人家的早期版本,结构比较凌乱,放出来让你自己折腾的,   ~~哈哈。不过你要理解好,还是得看资料,不适合从源码入手

#51 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 听韦哥讲Linux启动过程 » 2019-10-17 10:22:46

晕哥 说:

韦老师视频真的不错,深入浅出。


坑哥,你看了又不早点分享出来

#52 Re: Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2019-10-17 10:20:48

小智 说:

要是能加入编译器就好了,可以变成一个小型的脚本解析器,比lua和python脚本解析器消耗更小的资源,能处理比较简单的功能


这是直接使用三菱IDE,你说的解释器,有配套上位机IDE么

#53 VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 听韦哥讲Linux启动过程 » 2019-10-17 10:05:43

三哥
回复: 5

分享一个链接,韦东山讲得不错,你要快速知道Linux是如何被启动的,请看以下链接,uboot太大了不方便。



链接在此:

http://blog.chinaunix.net/uid-22072065-id-5111239.html



另附一堆韦哥的免费视频:



https://v.youku.com/v_show/id_XNjMxNDUwNjMy.html?f=20746515&from=y1.2-3.4.23

#54 Re: Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2019-10-17 07:47:36

从通信协议到地址分布,再到指令解析都是从原理入手,虽代码很少,知识点不少。从别人的代码入手这比较困难

#55 Re: Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2019-10-16 15:56:10

Gentlepig 说:

挺好,不是网上常见的那种。
----------------------------------
有几个.c文件行首都有很长的缩进。


你就是说这个风格和网上的不一样么

#56 Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2019-10-16 12:55:26

三哥
回复: 35

业余花了一段时间破解三菱PLC,暂支持27条基本指令,后续继续完善。如有想玩的朋友,可以搭个硬件试试。

我是三哥,QQ58223001

FluxBB bbcode 测试

https://whycan.cn/files/members/1056/chengju_plc20191016.rar

#61 Re: 全志 SOC » 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动) » 2018-08-20 17:45:33

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

#63 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » GUI圈子里面经常听说的剪切域是怎么回事,哪位来说说 » 2018-08-08 15:49:26

QQ20180809083244.png

上面是 剪切域计算完整代码


形象的说法就是好像被剪掉了一样,剪掉之后的区域

通常以矩形链表示

#66 Re: 全志 SOC » @assert 大神移植全志官方f1c100s linux bsp 到licheepi nano » 2018-08-03 17:44:49

如果从nano板子上spi flash启动,是从什么地址开始拷贝,拷到内存什么位置?

#67 Re: 全志 SOC » @assert 大神移植全志官方f1c100s linux bsp 到licheepi nano » 2018-08-03 17:20:44

坑哥,能讲一下f1c100s启动流程么,我想裸奔,我不知道是不是默认从spi flash启动,从什么地址开始拷贝到内存?

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn