跨界处理器

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 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的性能

介绍一下i.MX RT1052芯片的性能优点吧:

  1. 无需片内闪存

由于跨界处理器采用了应用处理器架构,具有大幅缩小的 SRAM 位单元,在跨界设计架构中,SRAM可以配置为具有“零等待”单周期访问的TCM,从而大幅提升系统性能。

  1. 高性能

具备高密度片内 TCM 或缓存的跨界处理器的缓存未命中率可低至 1-2%,因此能够提供明显高于 MCU 的有效性能。

  1. 低中断延迟

在协调对内部和外部硬件事件做出及时响应方面,中断在嵌入式系统中发挥了重要作用。在与用户交互的实时系统中,它们发挥的作用尤其重要,这是因为由用户输入触发的外部事件需要 CPU 做出可靠的低延迟即时响应。跨界处理器采用 MCU 内核构建,因此即使它们采用应用处理器架构,也延续了低中断延迟这一重要特性。跨界处理器的中断延迟最低可达到 10-20ns,而应用处理器的延迟通常长达 1毫秒。

  1. 高能效以及安全性。

野火i.MX RT1052工程

下面来说说固件库写的工程吧,按照火哥一贯舒服的代码风格

而且工程中含有不同版本的工程

正常来说,我们写代码不可能一次成功的,需要调试很久才出结果,可以通过ram_debug或者sdram_debug版本将程序快速加载到我们的开发板上的RT1052 芯片的内部 RAM 中或者是板载的SDRAM 芯片中,实现快速调试代码,但是RAM 空间小,适用于小程序调试,而板载的sdram则有32MB的空间,适用于大程序的调试。但是掉电则丢失这些程序,无法用在产品上,仅做调试用。

而下面两个版本,则可以作为产品的最终代码,将程序下载到NOR FLASH中,但是下载速度较慢,而且运行速度较SDRAM慢,杰杰猜测,我们或许应该可以将程序写为两段,在发布产品的时候,从NOR FLASH启动,运行NOR FLASH的第一段程序,将存在NOR FLASH的第二段程序加载到SDRAM/SRAM中运行,直到掉电。这样子就能提高速度了吧。

前面的前三个模式均采用低优化等级(-O0)优化,而_flexspi_nor_release版本则采用高优化(-O3)等级,以便节约程序空间,提高运行效率。(杰杰吐槽:就是编译有点久)。

温馨提示:如果不用mdk看代码的话,可以去掉“魔术棒”->Output -> Browse Information的√。然后可以使用source insight看代码,方便很多,至少比mdk好多了。

下个代码欣赏欣赏。

RT-Thread物联网操作系统

野火i.MX RT1052的程是移植了RT-Thread物联网操作系统的(还是要支持一下国产的操作系统的),来看看源码吧。

先介绍介绍RT-Thread物联网操作系统(以下简称rtt),操作系统是轻量级的,利用很小的资源完成实时操作系统的工作。

这些就是rtt的一些文件,bsp就是一些板级相关的东西,components就是一些组件,看英文单词都知道啦。然后就是src就是rtt的实现的源码,include就是一些头文件,而libcpu就是一些芯片的支持,tools就是一些rtt的工具,example还不会的别学嵌入式了。。。。。

看源码确实是一个很轻量级的操作系统,移植起来也是很简单,重点是火哥已经帮我们移植好啦,直接用吧,杰杰在学校rtt的过程中,发现跟一些操作系统还是有点不一样的,他的启动方式就在启动文件已经做好了。来看看:

在components.c中的148行:

1/* re-define main function */
2int $Sub$$main(void)
3{
4    rt_hw_interrupt_disable();
5    rtthread_startup();
6    return 0;
7}

先关中断,再做rtt的启动

 1int rtthread_startup(void)
 2{
 3    rt_hw_interrupt_disable();
 4    /* board level initalization
 5     * NOTE: please initialize heap inside board initialization.
 6     */
 7    rt_hw_board_init();
 8    /* show RT-Thread version */
 9    rt_show_version();
10    /* timer system initialization */
11    rt_system_timer_init();
12    /* scheduler system initialization */
13    rt_system_scheduler_init();
14#ifdef RT_USING_SIGNALS
15    /* signal system initialization */
16    rt_system_signal_init();
17#endif
18    /* create init_thread */
19    rt_application_init();
20    /* timer thread initialization */
21    rt_system_timer_thread_init();
22    /* idle thread initialization */
23    rt_thread_idle_init();
24    /* start scheduler */
25    rt_system_scheduler_start();
26    /* never reach here */
27    return 0;
28}

里面有一些函数是我们自己实现的,比如开发板初始化:rt_hw_board_init,

rtt还是有点好玩的,对外开放了main嘛!我们一般写程序都在main.c中,所以,它又搞了个main_thread_entry线程(其实我更喜欢把这些称作任务,不过都一样啦,既然学了rtt,那就跟官方叫吧)

 1void main_thread_entry(void *parameter)
 2{
 3    extern int main(void);
 4    extern int $Super$$main(void);
 5    /* RT-Thread components initialization */
 6    rt_components_init();
 7    /* invoke system main function */
 8#if defined (__CC_ARM)
 9    $Super$$main(); /* for ARMCC. */
10#elif defined(__ICCARM__) || defined(__GNUC__)
11    main();
12#endif
13}

这个函数是跳转到我们的main.c中的main。下面才是真正实现我们的代码的地方。

由于前面说了,rtt启动的时候,会将开发板相关资源初始化,所以,我们自己的main就不需要再初始化了,直接开启rtt的线程的创建与启动。

 1lcd_thread = rt_thread_create("lcd",
 2                                 lcd_thread_entry,
 3                                 RT_NULL,
 4                                 LCD_THREAD_STACK_SIZE,
 5                                 LCD_THREAD_PRIORITY,
 6                                 LCD_THREAD_TIMESLICE);
 7  if (lcd_thread != RT_NULL)  //创建成功
 8    rt_thread_startup(lcd_thread);  //启动线程
 9  else
10return -1;
11相关宏定义:
12#define LCD_THREAD_PRIORITY           13    /* 优先级,数值越大,优先级越低 */
13#define LCD_THREAD_STACK_SIZE         1024  /* 线程栈大小,单位为字节 */
14#define LCD_THREAD_TIMESLICE          5     /* 线程时间片,单位为tick */

i.MX RT1052性能测试

既然是评测,当然得有性能的评测啦,一段使用(-O0)低级优化的整形数计算,在野火i.MX RT1052板载的SDRAM上仅跑了21.487秒。在STM32H743上面跑了21.479秒(400M的工作频率,打开CaChe(高速缓存)),而在stm32f103zet6上跑了9分57秒多。性能可见一斑了吧???如果不信可以自行测试,我可是等了几分钟就去刷牙了,回来还没跑完。。。。。

测试代码如下:(来源网络的测试代码)

 1void Calculate()
 2{
 3    unsigned long x;
 4    unsigned long a;
 5    a=1;
 6    for(x=0;x<4294967294;x++)
 7    {
 8        a=a+1;
 9    }
10}

测试结果对比:

i.MX RT1052

STM32H743

stm32f103zet6

在性能上面,i.MX RT1052,估计是一般mcu无法跨越的存在了,性能真的是超级强悍的。看文章的网友可能有疑问了,明明400M主频的H7比1052快啊,在此杰杰回答一下,1052是在外部SDRAM上的程序,而H7在片内内存上。。。。而且重要的是工业级的1052仅需3.8美金,很便宜了。

据火哥测试,i.MX RT1052的刷屏速度也很快,1366*768分辨率的屏幕可以达到52HZ,而1280*800的屏幕则达到了60HZ,70MHZ左右的VCLK时钟,占用SDRAM的50%左右的数据吞吐量。

想要了解更多1052相关的东西,欢迎与杰杰联系

本次测试完结。

文章首发地址:野火i.MX RT1052开发板评测:移植RTT、与STM32H743性能对比

【野火®】i.MX RT1052评测——移植RT-Thread相关推荐

  1. RT Thread Free Modbus移植问题整理

    RT Thread Free Modbus移植问题整理 问题描述: 在读写寄存器中,写数据正常,只能读1个寄存器的值,多个值会异常. 在移植过程中发现串口(或RS485)数据接收长度异常. 一.环境描 ...

  2. 正点原子delay函数移植到rt thread操作系统(HAL库)

    正点原子教程中涉及到的操作系统只涉及了UCOS的教程,其中例程的system文件夹中的delay.c函数只是适配了UCOS. 下面将delay.c函数移植到rt thread中,使用的bsp是rt t ...

  3. 基于rt thread smart构建EtherCAT主站

    我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...

  4. rt thread studio使用QBOOT和片外flash实现OTA升级

    我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...

  5. Yeelink平台使用——远程控制 RT Thread + LwIP+ STM32

    1.前言     [2014年4月重写该博文]     经过若干时间的努力终于搞定了STM32+LwIP和yeelink平台的数据互通,在学习的过程中大部分时间花在以太网协议栈学习上,但是在RT Th ...

  6. RT Thread根据开发板制作BSP方法

    之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录.用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thr ...

  7. NXP i.MX RT1052 连载之 MCU 简介【1】

    一.i.MX 是何物? i.MX RT 系列芯片,是由 NXP 半导体公司推出的跨界处理理器芯片,该系列下又包括 i.MX RT1010. i.MX RT1015. i.MX RT1020. i.MX ...

  8. RT Thread利用STM32CUBEMX和RT Thread studio来创建模板工程

    (1)RT Thread利用STM32CUBEMX来创建模板工程 1.参考文档: 基于 CubeMX 移植 RT-Thread Nano:RT-Thread 文档中心 注意:串口2必须使能异步模式(启 ...

  9. xpt 2046的触摸屏 rt thread设备驱动框架

    1 基于rtt 开发触摸屏驱动 准备使用rtt 框架 , 驱动xpt 2046的触摸屏, 翻阅大量资料发现, 大部分文章强调的是时序图, 而且很多代码要么直接操作寄存器, 要么是io 口模拟, 只能用 ...

最新文章

  1. 多级反馈队列调度算法具体原理
  2. 让使用SQLite的.NET应用自适应32位/64位系统
  3. 计算机辅助教育会议,子会议1:学习科学、计算机辅助合作学习、智慧教育
  4. 探索JavaScript的关闭功能
  5. 打印速度快点的打印机_SLM推出了功能强大的新型金属3D打印机,速度快20倍
  6. 《深入浅出WPF》学习笔记之深入浅出话属性
  7. 大学生学图像处理计算机要求,重点大学计算机教材:数字图像处理
  8. 【性能测试】性能数据采集工具nmon安装使用及报告参数含义详解
  9. webpack5+vue3搭建h5项目模板-(一)-基础配置
  10. Chrome最新版本如何通过JS设置支持自动播放音频
  11. 酷软 正在连接服务器,酷软一直显示正在连接服务器...系统日志有大量错误信息...
  12. 内外网双网卡同时上网
  13. 4G多卡聚合路由器解决视频直播中的网络不稳定问题
  14. 个人网盘源码 本地网盘网站源码
  15. 外贸常用术语_常用的外贸术语及工具
  16. SEO应届生,如何快速的了解SEO?
  17. python3网络爬虫--爬取华为应用市场app数据(附源码)
  18. IDLE Help | 汉化
  19. 安全测试(五)Android APK软件安全 APP应用安全 手机软件安全 apk安全 apk反编译 应用日志窃取 apk漏洞 应用软件本身功能漏洞 高危权限泄密风险等 移动应用常规安全讲解
  20. 【上海 >>无锡】自驾两日游

热门文章

  1. Linux 使用 docker 安装 Nexus3 私服
  2. JavaWeb开发---B/S和C/S模式 tomcat服务器 Tomcat项目部署和发布 静态网页和动态网页 tomcat对web项目的目录要求 使用idea开发工具创建web项目 设置默认首页
  3. FreeSurfer预处理结果文件含义
  4. “操作无法完成,因为文件已在另一个程序中打开”怎么办?
  5. Docker、LXC、LXD这三种容器的区别
  6. 手机室内导航解决方案简介
  7. 好久不见的电信强制广告又来了。
  8. Python 实现AdaGrad和Adam拟合四次函数(随笔四)
  9. centOS下安装php7及扩展
  10. C语言实现方向余弦矩阵转旋转矢量