企业号介绍

全部
  • 全部
  • 产品
  • 方案
  • 文章
  • 资料
  • 企业

米尔电子

32内容数 3097看过 28粉丝

深圳市米尔科技有限公司成立于2011年,是一家专注于ARM嵌入式软硬件开发的高新技术企业。

米尔MYS-8MMX开发板试用体验测评——donatello1996

09-03 203人看过

米尔MYS-8MMX开发板试用体验测评

 
 
 
近期,米尔科技重磅发布新品“MYS-8MMX”开发板,并在电子发烧友、电路城等各大论坛发布试用通知,受到了众多工程师、广大电子爱好者围观,米尔选取了电子发烧友平台一篇优秀试用报告,在此同步给各位小伙伴们。
由于篇幅原因:该文章中使用libjpeg库和giflib库显示JPG图片和GIF图片 该测评不一一展示了,想了解具体内容可以复制该链接查看:https://bbs.elecfans.com/jishu_2154638_1_1.html

PART.1

开箱上电&系统烧录&文件系统移植&WIFI模块驱动加载

 
米尔MYS-8MMX开发板支持两种系统启动方式,两种烧录方式,两种系统启动方式为SD卡启动或板上EMMC启动,两种烧录方式为卡刷和线刷,其中卡刷又分为SD卡启动和SD卡烧写EMMC,SD卡启动是开发者常用系统启动模式,因为可以随时在远端主机上对SD卡文件进行增删查改;而产品项目中则常用SD卡烧写EMMC的方式,因为操作简单,反馈清晰(只需要一盏LED灯即可监控烧录是否完成)。实际上,SD卡启动还有一种用途就是可以在SD卡的系统中对EMMC内容进行修改,因此是最适合开发者的模式。若无特别说明,本次帖子及今后帖子我都在SD卡的系统中进行开发。
    
要制作SD启动卡,需要按照使用手册获取SD卡启动镜像,
名为myir-image-full-mys-8mmx.wic,
与手册所写myir-image-full-mys-8mmx.sdcard不符:
 
 
使用Win32DiskImager或别的烧录工具进行烧录即可。烧录完毕后,SD卡会分为三个部分,最前面8MB为预留空间不做分区,中间89MB为FAT分区存放BOOT.bin/内核文件/设备树dtb文件,后面的EXT分区,其中后面的EXT分区为开发者可以自由操作的分区,可对此分区进行分割,合并,扩容,删除等,一般有基础的开发者会将该分区的厂家出厂文件系统做备份然后删除,扩容并替换为自己的文件系统分区,文件系统发行版为Ubuntu/Debian/Centos/Redhat/ARMbian等,根据个人喜好而定,这么做的好处是,不影响内核驱动开发的版本兼容问题,并且能按照个人意愿自选安装各种第三方软件,如桌面运行扩展,x11扩展,网络扩展等,而我为了方便使用apt插件安装各种软件,选择的文件系统发行版依然为之前一直沿用的Debian 10 for arm64,
 
 
该文件系统发行版可用在所有arm64架构开发板上:搭建文件系统的帖子我之前发表过,可参考此帖:https://bbs.elecfans.com/jishu_2030659_1_1.html替换完毕后,启动系统,查看CPU信息和运行内存信息:
 
 
 
CPU为IMX8mini,四核A53,内存2GB。替换文件系统后,需要移植/lib/modules内核驱动目录,以便开机时由内核文件正确加载各个ko文件:
 
 
正确加载/usr/lib/modules/5.4.3-2.0.0+gbed0791/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko文件后,板载WIFI模块便可正常使用:
 
 
1. ifconfig wlan0
2. nmcli dev wifi
 
 

PART.2

QT开发板本地开发framebuffer&x11vnc的妙用

 
安装QT开发环境,即QT creator和QT5软件库:
1. apt install qt5-default qtcreator
安装x11界面远程登录软件x11vnc
1. apt install x11vnc
在进行QT开发之前,我先用vnc工具实时映射板子HDMI输出的界面,即/dev/fb0:
1. x11vnc -rawfb /dev/fb0 -clip 1920x1080
 
 
 
至于启动QT环境开发的方式有两种,第一种是使用SSH远程代码调试软件如VSCodeSourceInsight等,通过SSH方式登录到板子上,另外一种方法则是直接在板子的MobaXterm SSH终端启动QT creator
 
 
我个人倾向于两种方式结合使用,在不同的开发场合下使用不同方式。QT creator默认配置编译环境gcc
 
QT下操作framebuffer外设显示一行文字:
 
1. void MainWindow::LCD_Show_ASCII_64(uint32_t x,uint32_t y,uint32_t fontcolor,uint32_t backcolor,char word)
2. {
3.     int i,j,k;
4.     unsigned char temp;
5.     word -= 0x20;
6.     for(j=0;j<64;j++)
7.     {
8.         for(i=0;i<4;i++)
9.         {
10.             temp = ascii_font_64[j*4+i+word*256];
11.             for(k=0;k<8;k++)
12.             {
13.                 IF(temp & 0x80)
14.                     framebuffer_lcd[i*8+k+x+LCD_WIDTH*(j+y)] = fontcolor;
15.                 else
16.                     framebuffer_lcd[i*8+k+x+LCD_WIDTH*(j+y)] = backcolor;
17.                 temp<<=1;
18.             }
19.         }
20.     }
21. }
22. 
23. void MainWindow::LCD_Show_ASCII_String_64(uint32_t x,uint32_t y,uint32_t wordcolor,uint32_t backcolor,char s[])
24. {
25.         int i=0;
26.         for(i=0;s[i]!='\0';i++)
27.                 LCD_Show_ASCII_64(x+i*32,y,wordcolor,backcolor,s[i]);
28. }
29. 
30. int MainWindow::LCD_Effect(char *dev)
31. {
32.     int fd_lcd = open(dev , O_RDWR);
33.     if(fd_lcd == -1)
34.     {
35.         qdebug("open LCD faiLED!");
36.         return -1;
37.     }
38.     write(fd_lcd , framebuffer_lcd , LCD_WIDTH * LCD_HEIGHT * 4);
39.     ::close(fd_lcd);
40.     return 0;
41. }
 
可以看出,在QT下操作文件字符设备与普通系统编程并没有明显区别,唯一不同的是,QT下使用文件关闭函数需要添加双冒号::close(),防止与QT自带的close()函数产生冲突。在mainwindow类任意位置打开/dev/fb0外设后,即可进行ASCII码符号的显示:
1.     LCD_Show_ASCII_String_64(0 , 0 , 0 , LCD_COLOR_CYAN_32 , (char *)"elecfans.com");
2.     LCD_Show_ASCII_String_64(0 , 64 , 0 , LCD_COLOR_CYAN_32 , (char *)"donatello1996");
3.     LCD_Effect((char*)FB_DEV);
 
非常简单愉快就玩成了,看看x11vnc远程终端显示效果,这也就是HDMI实际显示是输出内容:
 
 
当然了,如果不设置环境变量QT_QPA_PLATFORM的话,x11终端下启动的x11应用就会在远程机器上直接显示(远程机器就是我的电脑):
 
 
设置QT_QPA_PLATFORM之后,可以将启动界面映射到任意framebuffer外设上:
1. export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
 
 

PART.3

编译内核镜像&USBHID设备通信

 
如果想用一种简单的方式控制更多外设的话,除了添加扩展芯片,还有一种项目上用得比较多的方式是USBHID通信,将开发板作为主机,通过USB接口与支持USBHID协议的从机进行通信,这个方法非常简单,刚入门嵌入式的小白也必须熟练掌握,只需要应用层开发的知识和皮毛的驱动层开发知识。要想使用这种方式进行通信,板子的内核镜像就必须支持USBHID设备的检测与读写,检测是没什么问题的,但是能不能映射到设备文件,供开发者进行读写操作,那就需要检查内核编译选项了,这里刚好是比较坏的一种情况,米尔厂家出厂镜像是没有打开USBHID通信的,必须让开发者重新编译内核镜像,那么这里就涉及到内核编译的知识了:下载并解压内核源码镜像:
1. https://github.com/MYiR-Dev/myir-imx-uboot.git
 
 
编译选项采用米尔MYS-8MMX开发板的编译选项mys_iot_defconfig
 
 
1. /home/myir-imx-linux-develop/arch/ARM64/configs/
2. make mys_iot_defconfig
 
 
这边还需要注意的是内核镜像的版本与使用内核源码编译第三方驱动ko文件的版本必须相同,在内核源码一级目录处可以找到配置的位置:
 
 
 
使用menuconfig打开内核编译选项, Device Drivers > HID support/dev/hidraw raw HID device support选项要打开,或者是在配置文件中添加此项配置的环境变量:
 
 
 
配置完毕之后,替换Image内核文件覆盖出厂内核文件:
 
1. mount /dev/mmcblk1p1 /media
2. mmcblk1是开发板的SD卡,mmcblk1p1SD卡的FAT分区,存放内核文件的位置:
 
 
重新启动之后,将USBHID设备插到板子的USB接口:
 
 
/dev目录下找到/dev/hidraw设备:
安装-ludev软件库:
 
1. apt install udev
使用代码读写HID设备:
1. handle = hid_open(2020, 2020, NULL);
2. res = hid_read(handle, buf, sizeof(buf));
 
 

PART.4

使用libjpeg库和giflib库显示JPG图片和GIF图片

 
Linux系统编程中对JPG和GIF图片的显示都有集成的软件库可以用,显示JPG图片可用libjpeg库,可以直接用apt在线安装apt install libjpeg62-turbo libjpeg62-turbo-dev对于ARM64架构的系统,会有turbo关键字,而在x86架构系统上面,直接安装libjpeg62即可。安装完毕之后,开发板的板上代码可以使用jpeglib.h提供的函数接口进行jpg文件的软件解码,直接读取jpg文件并显示在framebuffer外设之上,
具体函数如下:-struct jpeg_decompress_struct cinfo;
用于存放JPG文件解码数据的结构体-JSAMPARRAY buffer;
存放一行图像数据的结构体-jpeg_create_decompress(&cinfo);
初始化jpeg_decompress结构体对象的函数-jpeg_stdio_src(&cinfo,input_file);-
指定解压缩数据源
1. void LCD_RGB888_Show_JPG_File(char *dev , int xpos , int ypos , char *filename)
2. {
3.     //int fjpg;
4.     int i,j;
5.     FILE *input_file = fopen(filename,"rb");
6.     struct jpeg_decompress_struct cinfo;
7.     //JPEG图像在解码过程中
8.     //使用jpeg_decompress_struct类型的结构体来表示
9.     //图像的所有信息都存储在结构体中
10. 
11.     struct jpeg_error_mgr jerr;
12.     //定义一个标准的错误结构体
13. 
14.     JSAMPARRAY buffer;
15.     //用于存取一行数据
16.     //fjpg = open((char *)"/home/fa/1.jpg",O_RDONLY);
17.     cinfo.err = jpeg_std_error(&jerr);
18.     //绑定错误处理结构对象
19. 
20.     jpeg_create_decompress(&cinfo);
21.     //初始化cinfo结构
22. 
23.     jpeg_stdio_src(&cinfo,input_file);
24.     //指定解压缩数据源
25. 
26.     jpeg_read_header(&cinfo,TRUE);
27.     //获取文件信息
28. 
29.     jpeg_start_decompress(&cinfo);
30.     //开始解压缩
31. 
32.     int width = cinfo.output_width;
33.     //图像宽度
34.     int height = cinfo.output_height;
35.     //图像高度
36.     int depth = cinfo.output_components;
37.     //图像深度
38.     uint8_t img_byte = cinfo.jpeg_color_space;
39.     //像素字节数(1/2/3/4个字节,对应8/16/24/32位格式)
40. 
41.     memset(bmp_buf , 0 , sizeof(unsigned char) * width * height * depth);
42. 
43.     buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo,JPOOL_IMAGE , width * depth , 1);
44.     //分配一行数据空间
45.     point = bmp_buf;
46.     while(cinfo.output_scanline < height)//逐行读取位图数据
47.     {
48.         jpeg_read_scanlines(&cinfo , buffer , 1);
49.         //读取一行jpg图像数据到buffer
50.         memcpy(point , *buffer , width * depth);
51.         //将buffer中的数据逐行给src_buff
52.         point += width * img_byte;
53.         //指针偏移一行
54.     }
55. 
56.     jpeg_finish_decompress(&cinfo);//解压缩完毕
57. 
58. 
59.     for(i = 0 ; i < LCD_HEIGHT ; i ++)
60.     {
61.         for(j = 0 ; j < LCD_WIDTH ; j ++)
62.             if(i <= height && j <= width)
63.             {
64.                 uint32_t temp = bmp_buf[(i * width+j) * 3] << 16 |
65.                                 bmp_buf[(i * width+j) * 3 + 1] << 8 |
66.                                 bmp_buf[(i * width+j) * 3 + 2];
67.                 framebuffer_lcd[(i+ypos)*(LCD_WIDTH)+j+xpos] = temp;
68. 
69.             }
70.             //else framebuffer_lcd[(i+ypos)*(LCD_WIDTH)+j+xpos]=0;
71.     }
72.     int fd_lcd = open(dev , O_RDWR);
73.     write(fd_lcd , framebuffer_lcd , LCD_WIDTH * LCD_HEIGHT * 2);
74.     close(fd_lcd);
}
 
 米尔电子 
嵌入式解决方案专家
“米尔MYiR”公众号
不定期分享产品资料及干货
第一时间发布米尔最新资讯
 
 
 

原文标题:米尔MYS-8MMX开发板试用体验测评——donatello1996

文章出处:【微信公众号:米尔MYiR】欢迎添加关注!文章转载请注明出处。

分享:

最近浏览过的用户(0查看全部

为你推荐

  • Art-Pi Smart震撼发售!米尔电子6UL核心板支持RT-Thread上传时间:2021-11-15 18:48

    日前,RT-Thread联合百问科技出品ARTPISMART开发板,该产品基于米尔电子的MYC-Y6ULX-V2核心板开发,用于学习和评估RT-ThreadSmart微内核操作系统。新品在11月11日震撼发售,欢迎各位电子爱好者关注。硬件配置i.MX6ULL,单核ARMCortex-A7,最高运行频率可达800MHzDDR3SDRAM512MB,EMMC(4
    核心板 43人看过
  • 米尔电子MYS-8MMX开发板试用体验测评——卿小小_9e6上传时间:2021-11-09 11:02

    米尔电子MYS-8MMX开发板试用体验测评六日前,米尔科技(米尔电子)发布了多篇关于MYS-8MMX开发板的测评公告,本期测评者从IV.FFMPEG功能、VI.Sobel边缘检测进行产品的评测,具体如下。如需要查看往期测评内容的可点击下方链接查看:米尔MYS-8MMX开发板试用体验测评——tobot再来一份关于米尔MYS-8MMX开发板试用体验测评报告——r
    开发板 25人看过
  • 米尔MYS-8MMX开发板试用体验测评——dql2016上传时间:2021-10-25 17:46

    米尔MYS-8MMX开发板试用体验测评四日前,米尔科技发布了关于MYS-8MMX开发板的测评公告,公告发布后,吸引了各大媒体平台的测评者争相报名,本期我们分享其中一名优秀测评者的测评报告,供各位参考。如需要查看往期优秀测评内容的可点击下方链接查看:米尔MYS-8MMX开发板试用体验测评——tobot再来一份关于米尔MYS-8MMX开发板试用体验测评报告——r
    开发板 32人看过
  • 基于米尔MYC-C8MMX 核心板在智慧公交站的应用上传时间:2021-10-18 18:52

    米尔的MYC-C8MMX核心板,搭载NXPi.MX8MMini处理器,主频高达1.8GHz高效赋能智慧公交场站中的高清视频、音频等应用。公交作为一个城市的窗口,直接反映出一座城市的文明程度,每一天,数以万计的市民乘坐公交出行、生活,以北京为例,其公交出行的市民达到日均800万人次。目前,国内公交车的信息化程度不是特别高,传统的公交站乘客等待时间长、公交线路和
    核心板 45人看过
  • 米尔MYC-YA15XC-T 核心板在LoRa智能网关的应用上传时间:2021-10-08 19:00

    在数字经济大发展的大背景下,近些年工业物联网实现跨越式发展,智能工业技术广泛应用于智能化生产领域,通过将感知技术、通信技术、传输技术、数据处理技术、控制技术,运用到生产、配料、仓储等所有阶段,实现生产及控制的数字化、智能化、网络化,提高制造效率,改善产品质量,降低产品成本和资源消耗,实现工业智能化。图1:物联网物联网智能网关,信息整合工业物联网包含的核心要素
    网关 74人看过
  • 有奖试用!米尔新品STM32MP1系列产品上传时间:2021-09-22 17:21

    米尔最新产品MYC-YA15XC-T核心板采用全新的STM32MP1处理器,板载STPMIC电源芯片,DDR3,eMMC,NandFlash存储器。核心板PCB尺寸大小37x39mm。MYC-YA15XC-T具有高性能,高性价比,长供货时间的特点,适用于高性能智能设备所需要的核心板的要求。MYC-YA15XC-T核心板超高性价比批量订货可低至100元,并且稳
    开发板 46人看过
  • 米尔MYS-8MMX开发板试用体验测评——tobot上传时间:2021-09-18 18:41

    米尔MYS-8MMX开发板试用体验测评三想要了解优秀测评者“tobot”关于MYS-8MMX开发板测评原文的可以复制下方链接查看:http://bbs.eeworld.com.cn/thread-1175105-1-1.html想要了解MYS-8MMX开发板可以去米尔官网查看具体的产品介绍:http://www.myir-tech.com/product/m
    开发板 62人看过
  • 官宣:米尔电子携新品入驻企业号(电子发烧友)上传时间:2021-09-18 18:40

    原文标题:官宣:米尔电子携新品入驻企业号(电子发烧友)文章出处:【微信公众号:米尔MYiR】欢迎添加关注!文章转载请注明出处。
    开发板 116人看过
  • 再来一份关于米尔MYS-8MMX开发板试用体验测评报告——robe.zhang上传时间:2021-09-13 18:52

    米尔MYS-8MMX开发板试用体验测评二近期,米尔科技发布新品“MYS-8MMX”开发板的评测,吸引了广大开发者的围观,上周小编在公众号发布1篇优秀的测评报告,后台收到了各位小伙伴的留言和咨询,想必还有很多的疑问,为加深各位对米尔MYS-8MMX开发板的了解,再同步一篇电路城优秀测评者的测评报告,希望能帮助各位开发者缩短开发周期。想要了解优秀测评者“robe
    开发板 37人看过