🇼 🇦 🇮 🇹_bGX63X · 2022年01月04日

[XR806开发板试用] 模拟SPI 点亮0.96 寸OLED 屏幕

总结环境配置遇到的坑

  1. 首先是代码下载
    官方教程是这样的:

    mkdir xr806_openharmony
    cd xr806_openharmony
    repo init -u ssh://git@gitee.com/openharmony-sig/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify -m devboard_xr806.xml
    repo sync -c
    repo forall -c 'git lfs pull'   #下载部分大容量二进制文件
    

    但是由于鸿蒙仓库里面没有了,xr8o6 部分需要后面在临时仓库里面下载,所以代码下载部分的流程是:
    首先执行下面的命令:

    mkdir xr806_openharmony  #文件夹名称可以直接随便取
    cd xr806_openharmony
    repo init -u ssh://git@gitee.com/openharmony-sig/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify #就是去掉了 devboard_xr806.xml
    repo sync -c
    repo forall -c 'git lfs pull'   #下载部分大容量二进制文件
    

    再在从链接:  https://gitee.com/moldy-potato-chips/devboard\\\\\_device\\\\\_allwinner\\\\\_xr806 上下载的内容更改文件名为xradio ,然后拷贝到 device 目录下,xradio 目录的结构如下图所示:
     title=

将链接: https://gitee.com/moldy-potato-chips/devboard\\\\\_vendor\\\\\_allwinner\\\\\_xr806 上下载的内容也更名为xradio,然后拷贝到 vendor 目录下
     title=

  1. 第二个是固件编译
    官方教程是这样的:

    cd device/xradio/xr806/xr\\_skylark #(1)进入原生SDK目录
    cp project/demo/audio\\_demo/gcc/deconfig .config #(2)复制配置文件
    make menuconfig #(3)图形化界面配置
    make build\\_clean #(4)清除旧配置
    make lib -j #(5)根据配置生成静态库和全局头文件
    cd - #(6)返回Harmony根目录
    hb set #(7)选择wifi\\_skylark
    hb build -f #(8)编译,后续不需要重新配置

Harmony根目录就是我们创建的,保存鸿蒙源码,以及后面我们建立工程的目录,我这里就是按照官方的教程,建立的目录: xr806\\\\\_openharmony。
所以Harmony根目录在linux 终端里的显示是:~/your\\\\\_name/xr806\\\\\_openharmony。
在根目录里执行hb set 后 如果没有看到这个选项:
 title=
说明hb 的有些路径配置有问题,可以执行 hb env 看看 下面两个路径是不是 vendor/xradio/xr806 和 device/xradio/xr806/liteos\\\\\_m
 title=
一般这种情况下肯定不是,这种情况是 hb root path 设错了,使用 hb set -root /home/xxx/xr806,没有权限可以加个sudo 试试,我这里是:hb set -root /home/shan/xr806\\\\\_openharmony/vendor/xradio/xr806, 然后在执行hb set , 会出现下面类似的界面,通过方向键选择 wifi\\\\\_skylark 就好了。
 title=

工程建立和编译

  1. 进入目录 ohosdemo
    cd device/xradio/xr806/ohosdemo
  2. 新建工程文件夹
    mkdir -p oled
    然后将 hello\\\\\_demo 里面的BUILD.gn  拷贝到 oled 目录下:
     cp ../hello\\\\\_demo/BUILD.gn ./
    再新建 inc 和 src  文件夹:
     mkdir-p inc  src
  3. 编写代码
    我这里有是个文件:mian.c、 oled.c、oled.h,、types.h,将mian.c, oled.c 文件都添加到了 src 里,oled.h, types.h 放在了inc 目录下。
    main.c文件里的内容如下:
#include <stdio.h>
#include "ohos_init.h"
#include "kernel/os/os.h"
#include "iot_gpio.h"
#include "oled.h"

#define GPIO_PA13 13   /*SPI CS*/
#define GPIO_PA21 21   /* 运行指示灯 */

static OS_Thread_t g_main_thread;


extern u8 nonside[];

static void MainThread(void *arg)
{
    IoTGpioInit(GPIO_PA21); 
    IoTGpioSetDir(GPIO_PA21, IOT_GPIO_DIR_OUT);
    IoTGpioInit(GPIO_PA19);
    IoTGpioInit(GPIO_PA20);
    IoTGpioInit(GPIO_PA22);
    IoTGpioInit(GPIO_PA23);

    IoTGpioSetDir(GPIO_PA19, IOT_GPIO_DIR_OUT);
    IoTGpioSetDir(GPIO_PA20, IOT_GPIO_DIR_OUT);
    IoTGpioSetDir(GPIO_PA22, IOT_GPIO_DIR_OUT);
    IoTGpioSetDir(GPIO_PA23, IOT_GPIO_DIR_OUT);

    IoTGpioInit(GPIO_PA13);
    IoTGpioSetDir(GPIO_PA13, IOT_GPIO_DIR_OUT);
    IoTGpioSetOutputVal(GPIO_PA13, 0);

    LCD_Init();

    while (1)
    {
        IoTGpioSetOutputVal(GPIO_PA21, 1);
        OS_MSleep(500);
        IoTGpioSetOutputVal(GPIO_PA21, 0);
        OS_MSleep(500);
        LCD_Print(0, 0, "返回退出",TYPE16X16,TYPE8X16);
        LCD_Print(0, 16, "abcd09876",TYPE16X16,TYPE8X16);
        LCD_Print(16, 32, "efg12345",TYPE16X16,TYPE6X8);
        Draw_BMP(32,48,nonside);
        Draw_BMP(48,48,nonside);
        Draw_BMP(64,48,nonside);
    }

}

void LEDMain(void)
{

    printf("OLED Test Start \r\n");

    if (OS_OK != OS_ThreadCreate(&g_main_thread,
                        "MianThread",
                        MainThread,
                        NULL,
                        OS_THREAD_PRIO_APP,
                        1*1024)
        )
    {
        printf("[ERR] Create MianThread Failed\r\n");
    }
  
}

SYS_RUN(LEDMain);

其他文件都放进来太长了,这里就不放了,需要工程的,附上百度云链接:
链接:https://pan.baidu.com/s/1VW5AaxpsfHVh3VOoT1uxVA
提取码:pdy3

  1. 编译
    首先修改 oled/BUILD.gn 文件,添加源文件和头文件路径:

    import("//device/xradio/xr806/liteos\\_m/config.gni") #必须, config 文件中定义了头文件路径和宏

    static\\_library("app\\_oled") { #必须,所有应用工程必须是app\\_ 打头

     configs = []
    
     sources = [
    
         "src/oled.c",  #源文件路径
         "src/main.c",
         
     ]
    
     cflags = board_cflags   #必须,board_cflags 是在 config.gni 中定义的关键宏定义
    
     include_dirs = board_include_dirs   #必须, board_include_dirs 是在 config.gni 中定义的头文件路径
     
     include_dirs += [
    
         "//base/iot_hardware/peripheral/interfaces/kits",
         "inc/" #头文件路径
    
     ]
    

    }

再修改 ohosdemo/BUILD.gn 文件里面的内容,是工程能够被编译

group("ohosdemo") {

    deps = [

        #"hello_demo:app_hello",

        #"iot_peripheral:app_peripheral",

        #"wlan_demo:app_WlanTest",

        #"led:app_led",

        "oled:app_oled" #注释掉其他的,添加自己编写

    ]

}

最后返回到 Harmony根目录,执行 hb build -f, 等待编译完成

  1. 固件烧写
    将目录 device/xradio/xr806/xr\\\\\_skylark/out 下的文件:xr\\\\\_system.img,拷贝到windows 系统的某个目录下,打开phoenixMC\\\\\_v3.1.21014b.exe,连接上开发板后,点击升级固件就可以了:
     title= title=
  2. 查看结果
    运行结果如图:
     title=

我这里本来是有中文的,但是因为编码的原因,没有显示后面再来解决吧。

遇到的问题

编译的时候遇到了flash 空间不够的问题,问题通常如下:

这里官方教程也提到过,官方的解释以及解决方法如下:

这是因为旧的flash分配方案不再使用,这种情况会在device/xradio/xr806/xr\\_skylark/project/demo/wlan\\_ble\\_demo/image/xr806(或者device/xradio/xr806/xr\\_skylark/project/demo/audio\\_demo/image/xr806)自动生成文件image\\_auto\\_cal.cfg,把image\\_auto\\_cal.cfg里面的内容覆盖image\\_wlan\\_ble.cfg或者image.cfg即可。
推荐阅读
关注数
13823
内容数
139
全志XR806开发板相关的知识介绍以及应用专栏。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息