您尚未登录。

楼主 #1 2019-01-17 16:19:15

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

正常运行状态下,有没有办法切换到FEL模式?

F1C100s,如何能从正常运行状态切换到FEL模式?
跑的xboot,在已经运行起来了的状态下,调用start.S里的return_to_fel,没用。程序进入了不正常的状态。

离线

#2 2019-01-17 16:43:36

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: 正常运行状态下,有没有办法切换到FEL模式?

可以的  sunxi.org 网站有专门一个TF卡固件,插入TF卡,强制进入FEL





离线

楼主 #3 2019-01-17 22:28:04

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

Re: 正常运行状态下,有没有办法切换到FEL模式?

从这里 http://sunxi.org/FEL 的信息来看,似乎跳转到0xFFFF0020执行就是进FEL模式了,简单得难以置信。明天到公司试试。

离线

#4 2019-01-18 13:56:39

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 595
积分: 525
个人网站

Re: 正常运行状态下,有没有办法切换到FEL模式?

我也想找正常spi启动然后退回fel的方法。直接跳转到0xffff0020貌似不行,而且eGon也加回去了。楼主解决了的话分享一下

离线

楼主 #5 2019-01-19 16:04:39

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

Re: 正常运行状态下,有没有办法切换到FEL模式?

阶段性成果:目前能够在正常运行状态切换到FEL了,可以读写内存什么的。但是还无法通过sunxi-fel操作SPI Flash。

// xboot代码里把IRQ MASK全置1了,至少需要把USB-OTG(bit 26)置0才能进FEL。
write32(0x01C20400 + 0x30, 0);
// Control Register bit 13,使用高地址向量表
arm32_write_p15_c1(arm32_read_p15_c1() | (1 << 13));
// 跳转到FEL
asm("BX %0" : : "r"(0xFFFF0020));

最近编辑记录 Quotation (2019-01-19 16:04:54)

离线

#6 2019-01-19 16:08:51

basicdev
会员
注册时间: 2017-10-02
已发帖子: 159
积分: 159

Re: 正常运行状态下,有没有办法切换到FEL模式?

Quotation 说:

阶段性成果:目前能够在正常运行状态切换到FEL了,可以读写内存什么的。但是还无法通过sunxi-fel操作SPI Flash。

// xboot代码里把IRQ MASK全置1了,至少需要把USB-OTG(bit 26)置0才能进FEL。
write32(0x01C20400 + 0x30, 0);
// Control Register bit 13,使用高地址向量表
arm32_write_p15_c1(arm32_read_p15_c1() | (1 << 13));
// 跳转到FEL
asm("BX %0" : : "r"(0xFFFF0020));

就是说USB可以识别FEL设备,但是不能操作flash?
是不是spi外设时钟等没有配置好?

离线

楼主 #7 2019-01-19 16:15:51

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

Re: 正常运行状态下,有没有办法切换到FEL模式?

basicdev 说:

就是说USB可以识别FEL设备,但是不能操作flash?
是不是spi外设时钟等没有配置好?

是,sunxi-fel writel/readl等命令都可以用,flash相关的命令不可用。
猜测是某些寄存器需要重置为初始状态,FEL不会做太多检查、初始化的动作。如果代码里已经初始化了SPI,可能需要恢复原状。

离线

#8 2019-01-19 16:19:11

basicdev
会员
注册时间: 2017-10-02
已发帖子: 159
积分: 159

Re: 正常运行状态下,有没有办法切换到FEL模式?

Quotation 说:
basicdev 说:

就是说USB可以识别FEL设备,但是不能操作flash?
是不是spi外设时钟等没有配置好?

是,sunxi-fel writel/readl等命令都可以用,flash相关的命令不可用。
猜测是某些寄存器需要重置为初始状态,FEL不会做太多检查、初始化的动作。如果代码里已经初始化了SPI,可能需要恢复原状。

那继续加油,我在这里围观。

离线

#9 2021-07-07 12:34:30

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 446
积分: 313.5
个人网站

Re: 正常运行状态下,有没有办法切换到FEL模式?

晕哥 说:

可以的  sunxi.org 网站有专门一个TF卡固件,插入TF卡,强制进入FEL

简单找了下没找到,可以发个定位不?
不过我自己改了个,也可以用 https://whycan.com/t_6768.html

离线

#10 2021-07-08 00:03:31

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 446
积分: 313.5
个人网站

Re: 正常运行状态下,有没有办法切换到FEL模式?

刚好也有这个需求,想到另外一个方法:
写个程序或命令,把TF或FLASH的SPL给擦写掉,重启就进FEL了。
虽然不是预想的方法,但效果是完全一样的。

离线

#11 2021-08-30 01:10:35

sanpe
会员
注册时间: 2021-08-30
已发帖子: 4
积分: 2

Re: 正常运行状态下,有没有办法切换到FEL模式?

val = readl(CCU_BASE + SUNIV_BUS_SOFT_RST_REG0);
val &= ~(1 << 20);
writel(CCU_BASE + SUNIV_BUS_SOFT_RST_REG0, val);
val |= 1 << 20;
writel(CCU_BASE + SUNIV_BUS_SOFT_RST_REG0, val);

其实再加一步, 重启一下spi就好了

离线

楼主 #12 2021-09-03 16:59:51

Quotation
会员
注册时间: 2018-10-04
已发帖子: 289
积分: 271.5

Re: 正常运行状态下,有没有办法切换到FEL模式?

不行诶,早就试过reset SPI、还有恢复SPI相关的一些寄存器,没成功。

离线

#13 2021-09-05 03:57:16

sanpe
会员
注册时间: 2021-08-30
已发帖子: 4
积分: 2

Re: 正常运行状态下,有没有办法切换到FEL模式?

我写的裸机程序是可以在从sd卡和norflash返回时正常使用spi烧录的,可能是xboot开了cache和mmu的原因吧

离线

#14 2021-11-02 17:23:58

xboot
会员
注册时间: 2019-10-15
已发帖子: 675
积分: 421

Re: 正常运行状态下,有没有办法切换到FEL模式?

我补充一个F133 / D1s的方式吧,这个是利用rtc寄存器在reset时能够保持的特性开发的,原理比较简单,就是设置rtc寄存器为某个特殊的值后直接重启,start.s会检查rtc寄存器,如果为某个特殊值,就直接进入fel模式。

相关代码:

/*
 * command/cmd-fel.c
 */

#include <xboot.h>
#include <command/command.h>

static void usage(void)
{
    printf("usage:\r\n");
    printf("    fel\r\n");
}

static int do_fel(int argc, char ** argv)
{
    virtual_addr_t virt = phys_to_virt(0x07090000);

    do {
        write32(virt + 0x100 + 0x8, 0x5aa5a55a);
        mb();
        smp_mb();
    } while(read32(virt + 0x100 + 0x8) != 0x5aa5a55a);
    machine_reboot();

    return 0;
}

static struct command_t cmd_fel = {
    .name    = "fel",
    .desc    = "reboot and enter to fel mode",
    .usage    = usage,
    .exec    = do_fel,
};

static __init void fel_cmd_init(void)
{
    register_command(&cmd_fel);
}

static __exit void fel_cmd_exit(void)
{
    unregister_command(&cmd_fel);
}

command_initcall(fel_cmd_init);
command_exitcall(fel_cmd_exit);
    /* Check flag and enter to fel mode */
    addi sp, sp, -32
    sd s0, 8(sp)
    sd s1, 16(sp)
    sd ra, 24(sp)
    mv s0, a0
    li t0, 0x07090108
    lw t1, (t0)
    li t2, 0x5aa5a55a
    sw zero, (t0)
    bne t1, t2, _fel
    ld ra, 24(sp)
    ld s0, 8(sp)
    ld s1, 16(sp)
    addi sp, sp, 32
    ret
_fel:
    nop

权当抛砖引玉

最近编辑记录 xboot (2021-11-02 17:24:38)

离线

#15 2021-11-02 17:28:21

xboot
会员
注册时间: 2019-10-15
已发帖子: 675
积分: 421

Re: 正常运行状态下,有没有办法切换到FEL模式?

Quotation 说:

阶段性成果:目前能够在正常运行状态切换到FEL了,可以读写内存什么的。但是还无法通过sunxi-fel操作SPI Flash。

sunxi-fel不正常,可以试一试xfel,xfel在操作spi flash时会做很多初始化工作,xfel相比sunxi-fel,做的工作更多,依赖条件也更少。

离线

#16 2023-07-21 01:10:27

anuoplus
会员
注册时间: 2021-09-29
已发帖子: 31
积分: 16

Re: 正常运行状态下,有没有办法切换到FEL模式?

xboot说的有道理,可以试试

离线

页脚

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

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