完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
目标 给T113-S3适配RT-Thread,并支持SMP。 资料 没有太详细的资料和示例,只有一些零星的信息。 F133封装基本兼容 Cortex-A7双核 计划 最好能直接使用xfel在SRAM,或是DDR中运行,避免从SD卡启动还需要SPL。 先用xfel payload跑通, 最好能有串口打印。 再尝试直接load到ddr运行。 尝试在DDR中运行rt-thread 尝试响应中断 尝试支持SPL 过程 环境准备 开发板 芒果派 下载工具 xfel 先连接好开发板,默认没卡也没人FLASH,会自动进入USB FEL。 通过xfel可以探测并读取芯片信息。 xfel payload 磨刀不误砍柴工,调芯片最好有JTAG,没有的情况下,串口打印是必须的。 xfel工程里面有默认有t113-s3的ddr和spi的payload工程了。 我们先从里面剥离出最简单的串口操作代码,让其至少有输出功能,方便后面打印日志。 使用新编译出的payload,重新编译生成xfel,再随便执行下spi flash命令,串口有打印就行了。留着这代码备用。 ddr中运行代码 继续基于上面的代码,把具体的功能可以先屏蔽。然后把修改链接地址为ddr。 然后使用xfel把这代码加载到DDR中,运行下看没有输出。 果然看到了打印,说明可以使用xfel直接加载程序到DDR中运行,这样为后面的开发带来了极大的便利。 DDR中运行rt-thread 有了基本开发条件后,就可以开始移植软件部分了。 因为是cortex-a的内核,这块都比较通用,我打算基于bsp/qemu-vexpress-a9来修改。 先是使用menuconfig重新配置一下,把所有用不到的组件全关了,只留最基本的kernal和串口驱动部分。 再把链接脚本中的地址修改为目标芯片的地址 0x40000000。 然后把board.c中的中断和时钟心跳这些与硬件有关的代码先屏蔽。 串口驱动 因为没有JTAG,那么串口驱动是必须的了, 把之前从xfel payload中提取出来的串口驱动复制过来。 替换到原来的串口驱动的初始化部分,并把原来的所有硬件相关的代码暂时屏蔽。 只保留putc功能。 编译通过后,使用xfel加载到ddr中运行。观察串口。 果然没有任何打印 !!!! 汇编中的debug 遇事不要慌,问题肯定不大。没有任何打印说明程序没能正常运行,或是打印本身有问题。 首先没被运行的可能性可以排除,因为之前加载payload改的小代码可以运行的。 然后就是有可能程序还没运行到程序中串口初始化的地方,此时最好能有JTAG单步,或是能知道启动代码中的汇编程序都运行到哪了。 如果是C,每行加个打印就好了。嗯,汇编也能加。 因为驱动中的接口都是一堆参数,带句柄,还是static的,显然不方便汇编里面调用。 于是我们单独改造下,让串口初始化不需要参数,输出函数只要一个输出数据参数即可。 这样汇编中就可以比较方便调用了,先在启动入口看看有没打印。 新程序加载到DDR中,果然看到了我们想要的RTT这3个字的打印。说明程序运行到了这里。 通过这种办法,继续在汇编中添加不同的字符,最后定位到是进MMU初始化就再没打印了。 哦!!! 想起来还没更新MMU配置呢。 MMU配置可以先简单些,32位的全4G空间全部当成外设,把DDR区域设置为常规(带cache,可运行) 修改board.c中的platform_mem_desc表就好了 更新mmu配置后,果然看到了 RT-Thread 启动LOGO,还打印了msh>,当然,此时命令行不能输入。因为我们串口驱动的输入还没写。 因为全志的串口驱动基本兼容的,知道串口外设的基地址,直接抄原来其它芯片的代码,直接读寄存器,把getc实现就好了。 但还是不能输入,应该是要支持中断才行。 中断 cortex-A芯片一般都使用GIC,但有好几个版本,通过有限的资料查到,T113-S3是使用GICv2。 这块代码都是通用的,关键是要知道其在芯片中的地址,这个PDF中也有查到GIC地址是在0x03020000。 RT-Thread中,GICv2的适配需要知道2个地址,但PDF中没写。 这块根据全志同类型芯片的偏移来看,猜测是一样的 通过PDF上面查到的UART0中断号是34,改好后,加载运行,果然收到中断了。 SMP 接下来就是适配SMP了,因为只是2核,所以也不用管分簇这些了。 最主要是要知道第2个核是怎么启动,启动后会运行哪个地址的程序。 其它这里还有个坑点要注意,就是有些芯片多核是自动启动的,但此时一般软件环境还没准备好,需要把非0核先暂停下来。 如果是这类芯片,就需要把 RT_SMP_AUTO_BOOT 打印,这样非0核会自动挂起,直到被0核唤醒,再去指定地址运行。 因为我们之前都能正常运行了,所以肯定不是这种类型的。 此时更新menuconfig把SMP打开,然后更新下SMP需要的几个接口 编译通过后,使用xfel加载到ddr中运行。SMP果然愉快地运行起来了。 |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
590 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2241 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1233 浏览 0 评论
1788 浏览 0 评论
1464 浏览 0 评论
74811 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 22:41 , Processed in 0.428643 second(s), Total 39, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号