目标是希望RISC-V可以在A7双核工作的同时,启动裸机程序,做一些实时控制类的工作。
目前最新T113-I(应该就是R528吧?)手册已官宣同时支持A7双核+RISC-V、同时具有HIFI4 DSP
HIFI4编译器、开发环境都是闭源,需要找Cadence买,挺复杂
今天尝试了一下在A7核Linux上能否启动RISC-V核,目前还没成功
看看大家有没有什么想法。
在T113已经成功通过ARM核启动系统,进入Linux的前提下,RISC-V核的裸跑工作难度应该不大,不需要初始化内存等底层资源,只需要想办法让RV核复位跳转到启动向量即可
启动向量在哪里?看手册是0x06010004/8两个寄存器
1、编译器
https://occ.t-head.cn/community/download?id=4049193882418745344
平头哥官网,Xuantie-900-gcc-elf-newlib-x86_64-V2.4.0-20220428.tar.gz
通过xboot同学发布的D1裸跑demo,改一下ld文件就可以适配
2、时钟
要把RISC-V_CFG_CLK时钟打开,才可以操作到0x06010000地址
3、PLIT rv核独立中断控制器,目前在T113 Linux内核上好象没有启用,也没有在CCU上找到对应的开关
4、主要相关寄存器
0x02101D00 - 1D0C CCU RISC-V时钟控制
0x06010000 RISC-V CFG配置寄存器
5、根据uboot中看到的dsp核启动代码,大概推测启动rv核思路是
停止riscv核时钟
设置risc-v核时钟频率
打开riscv核时钟
复位risc-v核
设置risc-v核复位向量
接触risv-v核复位
目前还没成功,主要是没找到RISC-V核复位相关的寄存器
离线
HiFi4就是Xtensa加一些扩展,gcc-xtensa都支持,但是具体启用哪一个需要自己配置,魔改ESP32编译器就好。
国外大神已经通过crosstools-ng搞出来了。
离线
这个是说rv和arm共享总线么 厉害了
离线
@jjldc
rv核是不是要先置复位 然后各种设置 最后在释放复位
离线
还有一个地方需要研究,就是efuse部分,这个东西有可能搞手脚的。
离线
@jjldc
rv核是不是要先置复位 然后各种设置 最后在释放复位
比较尴尬的是,就卡在没找到RISC-V_RESET寄存器,DSP_RESET都有,RV核复位没有
一般就是给时钟,复位核-写reset vector - 释放,起码PC可以跳过去跑第一条指令
离线
T113-i 和 D1 pin2pin,和R528封装不同。
过几天我找代理要几个芯片贴到MQ-Pro上玩玩。
歪朵拉开源硬件 https://widora.io
个人网站 https://mangome.org
离线
这就厉害了,玩了几天113,裸机卡在如何初始化SDRAM了。
离线
你们有HIFI4-DSP User Manual 和 Compiler ? 看来这个DSP好厉害 !
离线
你们有HIFI4-DSP User Manual 和 Compiler ? 看来这个DSP好厉害 !
没弄到
今天问原厂是说A7和RISC-V二选一,不能共存
不是很确定
用risc-v的时候不就等于D1了么
离线
HIFI4 DSP 有人调试过吗?我们打算用这个DSP来做算法,但现在还没有什么头绪。
离线
RISC 内核是否与 H3 中的 AR100 (https://linux-sunxi.org/AR100) 相同?
离线
坐等大佬开核。
离线
高级应用.大佬研究挺深啊
离线
HIFI4 DSP 有人调试过吗?我们打算用这个DSP来做算法,但现在还没有什么头绪。
DSP已经用起来了
这个需要跟全志直接签协议,提供license、开发环境、支持包等资源,个人还不好弄
离线
xiongxinjian 说:HIFI4 DSP 有人调试过吗?我们打算用这个DSP来做算法,但现在还没有什么头绪。
DSP已经用起来了
这个需要跟全志直接签协议,提供license、开发环境、支持包等资源,个人还不好弄
看来这是HIFI Xtensa Compiler ?
https://bbs.aw-ol.com/topic/1424/share/4
离线
@audiomonster
是的,非开源编译器
离线
不开源,能开Dsp核能用就行
离线
@jjldc
现在启动risc-v和a7核了吗
离线
@jjldc
现在启动risc-v和a7核了吗
已经搞定了,另外重置riscv的为0x0f20
离线
想研究的,看这个代码,不贴代码的都是耍流氓。
{
// The Hotplug Flag Register is 0x070005DC.
// The Soft Entry Address Register is 0x070005E0.
// la a0, 0x02500000
// la a1, 0x23
// sb a1, 0 (a0)
// xxx: j xxx
// Test: write byte to 0x02500000 = UART0 data tegister
static const uint32_t code [] = {
0x02500537, // 37 05 50 02
0x0230059B, // 9B 05 30 02 │
0x00B50023, // 23 00 B5 00
0x0000006F, // 6F 00 00 00,
};
* (volatile uint32_t *) 0x070005DC = 0*0xFA50392Fu; // Hotplug Flag Register
* (volatile uint32_t *) 0x070005E0 = (uintptr_t) code; // Soft Entry Address Register
dcache_clean_all();
printhex(0x06000000, (void *) 0x06000000, 0x10000);
//CCU->RISC_GATING_REG
CCU->RISC_CFG_BGR_REG |= (1u << 16) | (1u << 0);
(void) CCU->RISC_CFG_BGR_REG;
PRINTF("CCU->RISC_CFG_BGR_REG=%08" PRIX32 "\n", CCU->RISC_CFG_BGR_REG);
RISC_CFG->RISC_STA_ADD0_REG = (uintptr_t) code;
RISC_CFG->RISC_STA_ADD1_REG = 0;//(uint32_t) (uintptr_t) code >> 32;
//memset(RISC_CFG, ~ 0u, sizeof * RISC_CFG);
PRINTF("CCU->RISC_GATING_REG=%08" PRIX32 ", CCU->RISC_CFG_BGR_REG=%08" PRIX32 "\n", CCU->RISC_GATING_REG, CCU->RISC_CFG_BGR_REG);
PRINTF("RISC_CFG->RISC_STA_ADD0_REG=%08" PRIX32 ", RISC_CFG->RISC_STA_ADD1_REG=%08" PRIX32 "\n", RISC_CFG->RISC_STA_ADD0_REG, RISC_CFG->RISC_STA_ADD1_REG);
//printhex32(RISC_CFG_BASE, RISC_CFG, sizeof * RISC_CFG);
local_delay_ms(3000);
//PRINTF("CCU->RISC_RST_REG=%08" PRIX32 "\n", CCU->RISC_RST_REG);
CCU->RISC_RST_REG = 0x16AA0001u;
(void) CCU->RISC_RST_REG;
//PRINTF("CCU->RISC_RST_REG=%08" PRIX32 "\n", CCU->RISC_RST_REG);
//ASSERT(CCU->RISC_RST_REG & 0x01u);
for (;;)
;
}
最近编辑记录 xboot (2023-05-26 11:40:19)
离线
这个T113-S3里面也是同样吗?
离线