i.MX RT1052芯片的核心板,性能和代码详细资料概述

i.mx rt1052是i.mx rt系列芯片,是由 nxp 半导体公司推出的跨界处理器芯片,该系列下又包括i.mx rt1020、i.mx rt1050及 i.mx rt1060等子系列芯片。所谓“跨界”,是指它自身的定位既非传统的应用处理器也非传统的微控制器。
传统的应用处理器如手机主控芯片,它们通常采用 arm 的 cortex-a系列内核,配合其芯片架构使得芯片能实现更高频率的运行。传统的微控制器也称为 mcu,它们通常采用arm 的 cortex-m 系列内核,相对来说该内核对中断响应更快,所以具有良好的实时性,但其芯片架构特别是集成片内闪存带来了生产技术限制和成本负担,从而限制了其性能。而i.mx rt 系列芯片集成了两者的优点,它基于应用处理器的芯片架构,采用了微控制器的内核 cortex-m7,从而具有应用处理器的高性能及丰富的功能,又具备传统微控制器的易用、实时及低功耗的特性。
野火的i.mx rt1052核心板搭载了i.mx rt1025dvl6a芯片,cortex-m7内核,主频高达600m。130个io全部引出。集成32mb sdram、128mb nand flash、32mb qspi flash、2kb eeprom、lcd-rgb565 fpc接口、1个swd调试接口、1个uart 调试接口、1个电源led、1个用户led、 一个复位按键、1个mode按键、 1个wakeup按键 和1个microusb接口等资源。芯片i0共130个, 均通过0.8mm的btb接口在背面引出,包括semc总线,方便我们扩展各种模块。
底板图片如下:
装在mini底板上的效果图,哎,杰杰还是很羡慕pro底板的,资源丰富。连lcd都能放在板子上,而我的lcd就只能通过排线弄出来。
看看火哥核心板的风骚走线:
顶层
底层
骚气得一批,不过很多信号线都采用等长走线,保证了信号的稳定性,这个值得点赞!!!
介绍一下i.mx rt1052芯片的性能优点吧:
1. 无需片内闪存
由于跨界处理器采用了应用处理器架构,具有大幅缩小的 sram 位单元,在跨界设计架构中,sram可以配置为具有“零等待”单周期访问的tcm,从而大幅提升系统性能。
2. 高性能
具备高密度片内 tcm 或缓存的跨界处理器的缓存未命中率可低至 1-2%,因此能够提供明显高于 mcu 的有效性能。
3. 低中断延迟
在协调对内部和外部硬件事件做出及时响应方面,中断在嵌入式系统中发挥了重要作用。在与用户交互的实时系统中,它们发挥的作用尤其重要,这是因为由用户输入触发的外部事件需要 cpu 做出可靠的低延迟即时响应。跨界处理器采用 mcu 内核构建,因此即使它们采用应用处理器架构,也延续了低中断延迟这一重要特性。跨界处理器的中断延迟最低可达到 10-20ns,而应用处理器的延迟通常长达 1毫秒。
4. 高能效以及安全性。
下面来说说固件库写的工程吧,按照火哥一贯舒服的代码风格
而且工程中含有不同版本的工程
正常来说,我们写代码不可能一次成功的,需要调试很久才出结果,可以通过ram_debug或者sdram_debug版本将程序快速加载到我们的开发板上的rt1052 芯片的内部 ram 中或者是板载的sdram 芯片中,实现快速调试代码,但是ram 空间小,适用于小程序调试,而板载的sdram则有32mb的空间,适用于大程序的调试。但是掉电则丢失这些程序,无法用在产品上,仅做调试用。
而下面两个版本,则可以作为产品的最终代码,将程序下载到nor flash中,但是下载速度较慢,而且运行速度较sdram慢,杰杰猜测,我们或许应该可以将程序写为两段,在发布产品的时候,从nor flash启动,运行nor flash的第一段程序,将存在nor flash的第二段程序加载到sdram中运行,直到掉电。这样子就能提高速度了吧。
前面的前三个模式均采用低优化等级(-o0)优化,而_flexspi_nor_release版本则采用高优化(-o3)等级,以便节约程序空间,提高运行效率。(杰杰吐槽:就是编译有点久)。
温馨提示:如果不用mdk看代码的话,可以去掉“魔术棒”->output -> browse information的√。然后可以使用source insight看代码,方便很多,至少比mdk好多了。
下个代码欣赏欣赏。
例程是移植了rt-thread物联网操作系统的(还是要支持一下国产的操作系统的),来看看源码吧。
先介绍介绍rt-thread物联网操作系统(以下简称rtt),操作系统是轻量级的,利用很小的资源完成实时操作系统的工作。
这些就是rtt的一些文件,bsp就是一些板级相关的东西,components就是一些组件,看英文单词都知道啦。然后就是src就是rtt的实现的源码,include就是一些头文件,而libcpu就是一些芯片的支持,tools就是一些rtt的工具,example还不会的别学嵌入式了。。。。。
看源码确实是一个很轻量级的操作系统,移植起来也是很简单,重点是火哥已经帮我们移植好啦,直接用吧,杰杰在学校rtt的过程中,发现跟一些操作系统还是有点不一样的,他的启动方式就在启动文件已经做好了。来看看:
在components.c中的148行
/* re-define main function */
int $sub$$main(void)
{
rt_hw_interrupt_disable();
rtthread_startup();
return 0;
}
先关中断,再做rtt的启动
int rtthread_startup(void)
{
rt_hw_interrupt_disable();
/* board level initalization
* note: please initialize heap inside board initialization.
*/
rt_hw_board_init();
/* show rt-thread version */
rt_show_version();
/* timer system initialization */
rt_system_timer_init();
/* scheduler system initialization */
rt_system_scheduler_init();
#ifdef rt_using_signals
/* signal system initialization */
rt_system_signal_init();
#endif
/* create init_thread */
rt_application_init();
/* timer thread initialization */
rt_system_timer_thread_init();
/* idle thread initialization */
rt_thread_idle_init();
/* start scheduler */
rt_system_scheduler_start();
/* never reach here */
return 0;
}
里面有一些函数是我们自己实现的,比如开发板初始化:rt_hw_board_init,
rtt还是有点好玩的,对外开放了main嘛!我们一般写程序都在main.c中,所以,它又搞了个main_thread_entry线程(其实我更喜欢把这些称作任务,不过都一样啦,既然学了rtt,那就跟官方叫吧)
void main_thread_entry(void *parameter)
{
extern int main(void);
extern int $super$$main(void);
/* rt-thread components initialization */
rt_components_init();
/* invoke system main function */
#if defined (__cc_arm)
$super$$main(); /* for armcc. */
#elif defined(__iccarm__) || defined(__gnuc__)
main();
#endif
}
这个函数是跳转到我们的main.c中的main。下面才是真正实现我们的代码的地方。
由于前面说了,rtt启动的时候,会将开发板相关资源初始化,所以,我们自己的main就不需要再初始化了,直接开启rtt的线程的创建与启动。
lcd_thread = rt_thread_create(lcd,
lcd_thread_entry,
rt_null,
lcd_thread_stack_size,
lcd_thread_priority,
lcd_thread_timeslice);
if (lcd_thread != rt_null) //创建成功
rt_thread_startup(lcd_thread); //启动线程
else
return -1;
相关宏定义:
#define lcd_thread_priority 13 /* 优先级,数值越大,优先级越低 */
#define lcd_thread_stack_size 1024 /* 线程栈大小,单位为字节 */
#define lcd_thread_timeslice 5 /* 线程时间片,单位为tick */
然后就是lcd_thread_entry线程的实现了,这个自己定义就好啦。
既然是评测,当然得有性能的评测啦,一段使用(-o0)低级优化的整形数计算,在野火i.mx rt1052板载的sdram上仅跑了21.487秒。在stm32h743上面跑了21.479秒(400m的工作频率,打开cache(高速缓存)),而在stm32f103zet6上跑了9分57秒多。性能可见一斑了吧?如果不信可以自行测试,我可是等了几分钟就去刷牙了,回来还没跑完。。。。。
测试代码如下:(来源网络的测试代码)
void calculate()
{
unsigned long x;
unsigned long a;
a=1;
for(x=0;x<4294967294;x++)
{
a=a+1;
}
}
i.mx rt1052
stm32h743
stm32f103zet6
在性能上面,i.mx rt1052,估计是一般mcu无法跨越的存在了,性能真的是超级强悍的。看文章的网友可能有疑问了,明明400m主频的h7比1052快啊,在此杰杰回答一下,1052是在外部sdram上的程序,而h7在片内内存上,而且h7开了cache,能不快吗,如果这点小程序在1052的片内内存上跑,绝对飞起。。。。。但是用上这么强的芯片,绝对不会只干这点小程序的活的,到时候跑gui,你就发现速度了。
据火哥测试,i.mx rt1052的刷屏速度也很快,1366*768分辨率的屏幕可以达到52hz,而1280*800的屏幕则达到了60hz,70mhz左右的vclk时钟,占用sdram的50%左右的数据吞吐量。

3D打印机DIY设计:硬件+软件的Arduino开源平台
一加首款OLED智能电视将要发布
未来科技发展的趋势和方向是怎么样的
农田小气候观测站在农作物栽培中的作用
区块链技术可以改善中小企业贷款的困难
i.MX RT1052芯片的核心板,性能和代码详细资料概述
eps电源功能介绍_eps电源输出电压是多少
在Ubuntu上搭建OpenVINO C++程序开发环境
电池技术提升,特斯拉面临新一轮冲击
9种最佳树莓派可用的Pi编程资源介绍
结构光相位展开技术的基本原理是什么
江西联通联合腾讯在南昌开启了智慧生活馆
借着自动驾驶的东风 ADAS已经在前装和后装市场铺开
旋转花键的使用寿命与机械原理分析
热释人体红外模块温度采集系统电路设计
中国物联网关键技术领域取得重要成果
分光光度计数据采集原理
基于边界扫描的电路板测试系统
IGBT是什么类型的器件 IGBT是电压驱动还是电流驱动
赛灵思出货7nm的自适应计算加速平台Versal