设为首页收藏本站
查看: 690|回复: 0

【扩展模块】基于米尔Remi Pi的e-Paper屏应用开发笔记

[复制链接]

2

主题

0

回帖

62

积分

注册会员

积分
62
路人甲 发表于 2024-4-7 10:48:05 | 显示全部楼层 |阅读模式
本帖最后由 路人甲 于 2024-4-7 16:45 编辑

1. 概述

Remi Pi采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600 / DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、SD卡、MIPI-CSI等外设接口,在工业、医疗、电力等行业都得到广泛的应用。
本文主要介绍基于Remi Pi开发板驱动spi墨水屏(微雪的e-Paper屏)显示的调试案例。

2. 硬件资源
(1)USB-TTL调试串口线一根
(2)Remi Pi开发板一块
(3)2.7inch e-Paper墨水屏一个
(4)5V 3A电源适配器一个

3. 软件资源
(1)Linux虚拟机
(2)米尔提供的SDK交叉工具链
(3)Linux5.10.83

4. 环境准备
进行调试之前,需要安装好Linux虚拟机等相关开发环境,具体可以参考《Remi Pi_Linux软件开发指南》的2.0章节。

5. e-Paper屏调试

5.1.1. 墨水屏树莓派接口

SPI 屏可以被当作 SPI 总线下面的从设备,用户只需在应用层进行控制显示即可,关于墨水屏的原理图、刷新原理等详细信息请参考微雪官方网址:
https://www.waveshare.com/wiki/2.7inch_e-Paper_HAT_Manual#C_2
墨水屏树莓派接口原理图如图5-1:

图片1.png
               图5-1. 墨水屏树莓派接口


5.1.2. Remi Pi树莓派接口

Remi Pi开发板树莓派接口原理图如图5-2:
图片2.png
          图5-2. Remi Pi树莓派接口


根据原理图对比可知两者的树莓派接口管脚是互相兼容的,那么根据墨水屏的相关信息可知道我们只需要在应用层来控制墨水屏的P17、P24、P25和P_CE0引脚模拟spi读写来驱动屏幕即可,即对应Remi Pi开发板的P40_2、P44_0、P32_0和P47_3引脚。


5.1.3. spi接口配置
进入内核源码目录配置spi设备树,由于应用程序会操作P44_0和P47_3,需要在设备树中释放出来。

PC:~/renesas/04_Sources/myir-renesas-linux$ vi arch/arm64/boot/dts/myir/mys-rzg2l-smarc-base.dtsi

&spi0 {
        pinctrl-0 = <&spi0_pins>;
        pinctrl-names = "default";
        status = "okay";
        spidev@0{
                        #address-cellss=<1>;
                        #size-cells=<1>;
                        compatible = "rohm,dh2228fv";
                        spi-max-frequency = <80000000>;
                        reg = <0>;
       };
};
spi0_pins: spi0 {
                        pinmux = <RZG2L_PORT_PINMUX(47, 0, 5)>,
                                         <RZG2L_PORT_PINMUX(47, 1, 5)>,
                                         <RZG2L_PORT_PINMUX(47, 2, 5)>;
        //                               <RZG2L_PORT_PINMUX(47, 3, 5)>;
        };
canfd1_pins: can1 {
        //      pinmux = <RZG2L_PORT_PINMUX(44, 0, 3)>, /* TxD */
        //                              <RZG2L_PORT_PINMUX(44, 1, 3)>; /* RxD */
        };



接着编译内核并更新设备树到开发板,重新启动开发板之后,可以看到/dev目录下生成了spidev0.0 设备节点,后续应用程序需要操作此设备节点。



5.1.4. 编写应用程序

SPI 屏初始化程序微雪官方有提供,只不过适用单片机和树莓派,这里需要修改适用于linux并移植到 Remi Pi 平台,由于篇幅有限,这里只贴部分代码,源码可到米尔sdk包的04_Sources目录下获取。除此微雪官方有提供 PNG 格式图像处理的函数,方便用户用来做图片处理。



PC:~/renesas/e-Paper$ tree -L 1
.
├── bin
├── epd
├── examples
├── lib
├── Makefile
├── Makefile.bak
├── Makefile.save
├── pic
├── readme_CN.txt
└── readme_EN.txt

4 directories, 6 files




首先需要打开设备节点,获得设备描述符,并设置 SPI 参数。



PC:~/renesas/e-Paper$ cat /lib/Config/dev_hardware_SPI.c
void DEV_HARDWARE_SPI_begin(char *SPI_device)
{
    //device
        printf("test hardware\n");
    int ret = 0;
    if((hardware_SPI.fd = open(SPI_device, O_RDWR )) < 0)  {
        perror("Failed to open SPI device.\n");
        DEV_HARDWARE_SPI_Debug("Failed to open SPI device\r\n");
        exit(1);
    } else {
                printf("open:%s\r\n",SPI_device);
        DEV_HARDWARE_SPI_Debug("open : %s\r\n", SPI_device);
    }
    hardware_SPI.mode = 0;

    ret = ioctl(hardware_SPI.fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
    if (ret == -1) {
        DEV_HARDWARE_SPI_Debug("can't set bits per word\r\n");
    }

    ret = ioctl(hardware_SPI.fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
    if (ret == -1) {
        DEV_HARDWARE_SPI_Debug("can't get bits per word\r\n");
    }
    tr.bits_per_word = bits;

    DEV_HARDWARE_SPI_Mode(SPI_MODE_0);
    DEV_HARDWARE_SPI_ChipSelect(SPI_CS_Mode_LOW);
    DEV_HARDWARE_SPI_SetBitOrder(SPI_BIT_ORDER_MSBFIRST);
    DEV_HARDWARE_SPI_setSpeed(20000000);
    DEV_HARDWARE_SPI_SetDataInterval(0);
}


编译应用程序



PC:~/renesas/e-Paper$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux
PC:~/renesas/e-Paper$ make
PC:~/renesas/e-Paper$ ls
bin  epaper  epd  examples  lib  Makefile  Makefile.bak  Makefile.save  pic  readme_CN.txt  readme_EN.txt



编译完成后会得到一个epaper的可执行二进制文件,把该文件拷贝到开发板执行即可。



5.1.5. 测试



root@myir-remi-1g:~# chmod 777 epaper
root@myir-remi-1g:~# ./epaper
EPD_2IN7_test Demo
/***********************************/
Current environment: Poky
Write and read /dev/spidev0.0
Debug: Export: Pin376
Debug: Pin32_0:Output
Debug: OUT Pin = 376
Debug: Export: Pin499
Debug: Pin47_3:Output
Debug: OUT Pin = 499
Debug: Export: Pin442
Debug: Pin40_2:Output
Debug: OUT Pin = 442
Debug: Export: Pin472
Debug: Pin44_0:intput
Debug: IN Pin = 472
test hardware
open:/dev/spidev0.0
/***********************************/
e-Paper Init and Clear...
Debug: Data= spi test
Debug: e-Paper busy
Debug: e-Paper busy release
Debug: init success
Debug: e-Paper busy
Debug: e-Paper busy release
Paint_NewImage
show window BMP-----------------
pixel = 100 * 100
Debug: e-Paper busy
Debug: e-Paper busy release
show bmp------------------------
pixel = 264 * 176
Debug: e-Paper busy
Debug: e-Paper busy release
show image for array
Debug: e-Paper busy
Debug: e-Paper busy release
SelectImage:BlackImage
Drawing:BlackImage
EPD_Display
Debug: e-Paper busy
Debug: e-Paper busy release
Clear...
show Gray------------------------
4 grayscale display
Debug: e-Paper busy
Debug: e-Paper busy release
Debug: e-Paper busy
Debug: e-Paper busy release
Debug: e-Paper busy
Debug: e-Paper busy release
pixel = 176 * 264
biBitCount = 4
bmpInfoHeader.biWidth = 176
bmpInfoHeader.biHeight = 264
Debug: e-Paper busy
Debug: e-Paper busy release
pixel = 100 * 100
Debug: e-Paper busy
Debug: e-Paper busy release
Debug: e-Paper busy
Debug: e-Paper busy release
Goto Sleep...
close 5V, Module enters 0 power consumption ...


程序执行后可以看到墨水屏依次显示对应的图片,如图5-3:


图片3.png

          图5-3. e-paper运行图




回复

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-10-31 17:34 , Processed in 0.198088 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表