Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • 社区主页
    1. Home
    2. q1215200171
    • Profile
    • Following 0
    • Followers 1
    • my integral 10883
    • Topics 218
    • Posts 310
    • Best 23
    • Groups 1

    budboolLV 7

    @q1215200171

    10883
    integral
    37
    Reputation
    92
    Profile views
    310
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    q1215200171 Unfollow Follow
    Global Moderator

    Best posts made by q1215200171

    • 【FAQ】全志XR806芯片FAQ汇总(你不知道的和你想知道的的这里都有)

      01、【FAQ】全志XR806芯片 系统异常重启如何解决?
      02、【FAQ】全志XR806芯片 如何更换打印log口?
      03、【FAQ】全志XR806芯片 为什么开机时候串口以及部分gpio会有电平跳变?
      04、【FAQ】全志XR806芯片 mac地址要如何存放以及如何获取?
      05、【FAQ】全志XR806芯片 固件烧录完成后,程序不是预期烧录程序或者甚至无法启动如何解决?
      06、【FAQ】全志XR806芯片 如何使用timer命令行命令?
      07、【FAQ】全志XR806芯片 如何修改中断优先级?
      08、【FAQ】全志XR806芯片 如何设置AP模式默认IP地址、子网掩码、网关?
      09、【FAQ】全志XR806芯片 低功耗蓝牙BLE断开连接错误码和分析?
      10、【FAQ】全志XR806芯片 select引发崩溃如何解决?
      11、【FAQ】全志XR806芯片 如何打开 LwIP 调试信息?
      12、【FAQ】全志XR806芯片 执行扫描动作时,偶尔会扫描不到目标的AP如何解决?
      13、【FAQ】全志XR806芯片 如何解决编译错误undefined reference to?
      14、【FAQ】全志XR806芯片 standby模式下gpio的电平状态是如何变化?
      15、【FAQ】全志XR806芯片 如何清除扫描列表缓存?
      16、【FAQ】全志XR806芯片 RTC时钟不能跑、有时候时间不准是什么原因?
      17、【FAQ】全志XR806芯片 如何使用watchpoint功能?
      18、【FAQ】全志XR806芯片getsockopt、setsockopt失败如何解决?
      19、【FAQ】全志XR806芯片 串口修改波特率后与目标波特率不匹配如何解决?
      20、【FAQ】全志XR806芯片 Xradio Skylark 中的无线网络回调事件含义
      21、【FAQ】全志XR806芯片 如何使用phoenixMC软件把应用固件与etf固件合并在一起?
      22、【FAQ】全志XR806芯片 RF参数是如何保存的?
      23、【FAQ】全志XR806芯片 汇编代码调试技巧
      24、【FAQ】全志XR806芯片 如何解决第三方静态库函数符号重复?
      25、【FAQ】全志XR806芯片 如何创建自定义状态回调函数?
      26、【FAQ】全志XR806芯片 如何获取ap的rssi值?
      27、【FAQ】全志XR806芯片 XR806如何添加本地音频到flash?
      28、【FAQ】全志XR806芯片 XR MCU的外设驱动为什么修改无效?
      29、【FAQ】全志XR系列 XRMCU如何播放xip中的音频?
      30、【FAQ】全志XR系列 XRMCU如何修改录音编码器的输入数据?
      31、【FAQ】全志XR系列 如何调试wifi频偏问题?
      32、【FAQ】全志XR系列 如何统计XRMCU的内存使用情况
      33、【FAQ】全志XR系列 设置音频结构体HttpStreamBufferConfig成员有什么意义?
      34、【FAQ】全志全系列芯片 APST平台无法下载或者更新工具
      35、持续更新....

      posted in XR806
      q1215200171
      budbool
    • 开发者成长计划正式上线!一起争做社区”高手“!

      相信大家都已经发现社区有了一点小小的变化,头像下方多了个金闪闪的大V,通知栏有积分获取的通知,发帖、评论、点赞所有行为都有了实时的反馈,这其实就是全志在线社区为开发者们全新设立的开发者成长计划。

      积分制横图.png

      开发者成长体系是以成长值作为核心衡量指标的激励体系,成长值获取公式为:成长值= 20%活跃 + 80%贡献,成长值是根据开发者在论坛中的行为,结合活跃与贡献进行的综合评价,成长值即决定了开发者在社区的用户等级,积分与成长值一同获取,在不久的将来将会上线积分商城,获取的积分可以兑换包括开发板在内的精美礼品,只要在论坛足够活跃,有足够多的贡献,心爱的板子再也不用花998,用积分兑换也可以把他带回家。

      积分细则如下:
      积分制度长图2.png

      积分、等级及积分记录查看方式如下:
      E3A8A39D-F4C5-4877-BF87-B91F1B321E5F.png 64CB6BB4-1A97-4e9b-B835-C1921A11E4CE.png
      562A7EC0-0AE1-42c7-92E6-B97AAB19E995.png

      posted in 公告
      q1215200171
      budbool
    • 一条命令搞定全志XR806编译环境

      本文转自极术社区:https://aijishu.com/a/1060000000311849、

      XR806是全志科技旗下子公司广州芯之联研发设计的一款支持Wi-Fi和BLE的高集成度无线MCU芯片,基于安谋科技STAR-MC1架构,支持鸿蒙L0系统。

      全志科技同时也发布了一款XR806的开发板,具体长这样:
      1398772385-623c08aba9567.jpg

      之前有很多刚接触它的朋友,被编译环境难住了。

      最近正好有空,干脆把相关代码和编译工具都做了配置和集成,做了个容器给大家。

      系统是Ubuntu 20.04,OpenHarmony代码版本是1.0.1_release。

      项目地址:
      https://hub.docker.com/r/verdureorange/ubuntu_xr806/

      具体用法:
      装完Docker以后,docker run -it verdureorange/ubuntu_xr806:v1 /bin/bash

      如果你是Windows或Mac,可以下载Docker桌面版:
      https://www.docker.com/products/docker-desktop/

      主要代码在/root/xr806_openharmony/,大家可以直接在里面编译或调试。

      如果有不清楚的地方可以看以下视频,感谢前面很多开发者所做的工作。

      posted in XR806
      q1215200171
      budbool
    • R329语音识别视频教程,从编译到部署,完全可用

      R329语音识别 视频教程, 从编译到部署,完全可用
      R329语音识别之前发布了一个简单版本, 今天终于出了一个详细的版本, 可以自行在 R329上实现编译
      获取到语音识别的结果用于其他的DIY项目
      手把手教会如何编译, 以及在哪修改源码更改功能

      视频地址: https://www.bilibili.com/video/BV1Rq4y1B7WH?spm_id_from=333.999.0.0
      项目地址: https://github.com/7758258abc/r329_speed
      下载Maix-Speech-master的地址: https://github.com/sipeed/Maix-Speech

      原文链接:https://bbs.sipeed.com/thread/1296

      enxegIUmXvwB6in26G2sqHS7qp2axDYvVLldRWgM.png

      posted in R329
      q1215200171
      budbool
    • 【XR806开发板试用】系列之二 - I2C外设使用及控制OLED屏显示

      前言
      XR806硬件上支持SPI,I2C等其他外设接口,且DDR和FLASH,满足常见应用场景的开发,适合开发者进行方案评估、DIY或小规模产品研发使用。本篇文章,将使用到I2C接口,去控制OLED屏幕的显示。

      OLED屏幕规格: 0.96英寸 主控SSD1306 I2C接口 地址 0x3C
      XR806外设:I2C1
      

      创建工程
      参考device/xradio/xr806/ohosdemo目录下的wlan_demo,

      拷贝wlan_demo为xr806_oled,并同步修改ohosdemo和xr806_oled目录下的BUILD.gn。

      主要修改如下:

      1、device/xradio/xr806/ohosdemo/BUILD.gn

      group("ohosdemo") {
       deps = [
           #"hello_demo:app_hello",
           #"iot_peripheral:app_peripheral",
           #"wlan_demo:app_WlanTest",
           "xr806_oled:app_oled", #增加app_oled目标编译
       ]
      }
      

      2、device/xradio/xr806/ohosdemo/xr806_oled/BUILD.gn

      static_library("app_oled") {
         configs = []
      
         sources = [
        "main.c",
         ]
      
         cflags = board_cflags
      
         include_dirs = board_include_dirs
         include_dirs += [
          ".",
          "thirdparty/ssd1306/ssd1306",
          "//utils/native/lite/include",
          "//foundation/communication/wifi_lite/interfaces/wifiservice",
         ]
      
         deps = [
          "thirdparty/ssd1306/ssd1306:oled_ssd1306",
         ]
      }
      

      注意:

      • static_library代表生成静态库(.a)文件,其中包含main.c的静态库必须是app_打头,如app_hello,否则虽然可以编译成功,但无法生效;
      • ~~xr806_oled/BUILD.gn中静态库app_oled的命名,需要和ohosdemo/BUILD.gn中的一致;
      • thirdparty/ssd1306/ssd1306:oled_ssd1306 为依赖的开源库

      工程编译
      创建工程后,如果非首次编译,执行以下命令便可以编译:

      hb build
      

      编译如果遇到以下错误:

      [OHOS ERROR] /*
      [OHOS ERROR]  *
      [OHOS ERROR]  * Automatically generated file; DO NOT EDIT.
      [OHOS ERROR]  * XR806 SDK Configuration
      [OHOS ERROR]  *
      [OHOS ERROR]  */
      [OHOS ERROR] /*
      [OHOS ERROR]  *
      [OHOS ERROR]  * Automatically generated file; DO NOT EDIT.
      [OHOS ERROR]  * XR806 SDK Configuration
      [OHOS ERROR]  *
      [OHOS ERROR]  */
      [OHOS ERROR] {
      [OHOS ERROR]     "magic" : "AWIH",
      [OHOS ERROR]     "version" : "0.5",
      [OHOS ERROR]     "image" : {"max_size": "1532K"},
      [OHOS ERROR]     "section" :[
      [OHOS ERROR]   {"id": "0xa5ff5a00", "bin" :"boot_40M.bin", "cert": "null", "flash_offs": "0K", "sram_offs": "0x00230000", "ep": "0x00230101", "attr":"0x1"},
      [OHOS ERROR]   {"id": "0xa5fe5a01", "bin" :"app.bin", "cert": "null", "flash_offs": "32K", "sram_offs": "0x00201000", "ep": "0x00201101", "attr":"0x1"},
      [OHOS ERROR]   {"id": "0xa5fd5a02", "bin" :"app_xip.bin", "cert": "null", "flash_offs": "99K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x2"},
      [OHOS ERROR]   {"id": "0xa5fa5a05", "bin" :"wlan_bl.bin", "cert": "null", "flash_offs": "1170K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
      [OHOS ERROR]   {"id": "0xa5f95a06", "bin" :"wlan_fw.bin", "cert": "null", "flash_offs": "1173K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
      [OHOS ERROR]   {"id": "0xa5f85a07", "bin" :"sys_sdd_40M.bin", "cert": "null", "flash_offs": "1198K", "sram_offs": "0xffffffff", "ep": "0xffffffff", "attr":"0x1"},
      [OHOS ERROR]   {}
      [OHOS ERROR]  ]
      [OHOS ERROR] }
      [OHOS ERROR] 
      [OHOS ERROR] make[2]: *** [../../../../project/project.mk:520:image] 错误 255
      [OHOS ERROR] make[2]: 离开目录“/home/algo/openharmony/xr806/device/xradio/xr806/xr_skylark/project/demo/audio_demo/gcc”
      [OHOS ERROR] make[1]: *** [../../../../project/project.mk:493:__build] 错误 2
      [OHOS ERROR] make[1]: 离开目录“/home/algo/openharmony/xr806/device/xradio/xr806/xr_skylark/project/demo/audio_demo/gcc”
      [OHOS ERROR] make: *** [Makefile:164:build] 错误 2
      [OHOS ERROR] you can check build log in /home/algo/openharmony/xr806/out/xr806/wifi_skylark/build.log
      [OHOS ERROR] /home/algo/.local/bin/ninja -w dupbuild=warn -C /home/algo/openharmony/xr806/out/xr806/wifi_skylark failed, return code is 1
      

      执行以下命令后,再次编译即可:

      cp  device/xradio/xr806/xr_skylark/project/demo/audio_demo/image/xr806/image_auto_cal.cfg  device/xradio/xr806/xr_skylark/project/demo/audio_demo/image/xr806/image.cfg
      

      编译后生成的镜像,便可以烧录验证。

      注:以上基础工程是基于wlan_demo,oled屏幕显示需要使用I2C外设和移植oled库

      库移植
      其实XR806本身自带了OLED主控为SSD1306的驱动(采用的是SPI接口方式),移植基于I2C接口的库也相对简单,可以参考开源库harmonyos-ssd1306,将其中的I2C相关头文件和API替换为XR806 OpenHarmony中的相关头文件和API,编译通过即可。

      其中涉及到BUID.gn的修改如下:

      static_library("oled_ssd1306") {
          sources = [
              "ssd1306.c",
              "ssd1306_fonts.c",
          ]
      
          include_dirs = [
              ".",
              "//kernel/liteos_m/kernel/arch/include",
              "//utils/native/lite/include",
              "//base/iot_hardware/peripheral/interfaces/kits",
          ]
      }
      

      开源库主要修改如下:

      #include "iot_i2c.h"
      #include "iot_errno.h"
      
      /**
       * @brief Defines I2C data transmission attributes.
       */
      typedef struct {
          /** Pointer to the buffer storing data to send */
          unsigned char *sendBuf;
          /** Length of data to send */
          unsigned int  sendLen;
          /** Pointer to the buffer for storing data to receive */
          unsigned char *receiveBuf;
          /** Length of data received */
          unsigned int  receiveLen;
      } IotI2cData;  
      
      
      static uint32_t ssd1306_SendData(uint8_t* data, size_t size)
      {
          uint32_t id = SSD1306_I2C_IDX;
          IotI2cData i2cData = {0};
          i2cData.sendBuf = data;
          i2cData.sendLen = size;
      
          return IoTI2cWrite(id, SSD1306_I2C_ADDR, i2cData.sendBuf, i2cData.sendLen);
      }
      

      ssd1306.h头文件定义SSD1306_I2C_IDX为1

      显示程序
      程序部分参考了上面提到的OLED库,完整的测试程序,可以参考harmonyos-ssd1306里的example.

      /*
       * Copyright (c) 2021-2031, AlgoIdeas
       *
       * SPDX-License-Identifier: Apache-2.0
       *
       * Change Logs:
       * Date           Author       Notes
       * 2020-12-13     AlgoIdeas    the first version
       */
      
      #include <stdio.h>
      #include "ohos_init.h"
      #include "kernel/os/os.h"
      #include "ssd1306.h"
      
      #define OLED_I2C_BAUDRATE       100000
      
      static OS_Thread_t g_main_thread;
      
      
      static void DrawChinese(void)
      {
          const uint32_t W = 12, H = 12, S = 16;
          uint8_t fonts[][24] = {
              {
                  /*-- ID:0,字符:"您",ASCII编码:C4FA,对应字:宽x高=12x12,画布:宽W=16 高H=12,共24字节*/
                  0x14,0x00,0x24,0x00,0x2F,0xF0,0x71,0x20,0xA5,0x40,0x29,0x20,0x33,0x10,0x20,0x00,
                  0x54,0x40,0x52,0xA0,0x90,0x90,0x0F,0x80,
              },{
                  /*-- ID:1,字符:"好",ASCII编码:BAC3,对应字:宽x高=12x12,画布:宽W=16 高H=12,共24字节*/
                  0x20,0x00,0x27,0xE0,0x20,0x40,0xF8,0x80,0x48,0x80,0x48,0xA0,0x57,0xF0,0x50,0x80,
                  0x30,0x80,0x28,0x80,0x4A,0x80,0x81,0x00,
              },{
                  /*-- ID:2,字符:"鸿",ASCII编码:BAE8,对应字:宽x高=12x12,画布:宽W=16 高H=12,共24字节*/
                  0x00,0x40,0x80,0x80,0x5D,0xE0,0x09,0x20,0xC9,0xA0,0x09,0x60,0x29,0x00,0xCD,0xF0,
                  0x58,0x10,0x43,0xD0,0x40,0x10,0x40,0x60,
              },{
                  /*-- ID:3,字符:"蒙",ASCII编码:C3C9,对应字:宽x高=12x12,画布:宽W=16 高H=12,共24字节*/
                  0x09,0x00,0x7F,0xE0,0x09,0x00,0x7F,0xF0,0x80,0x10,0x7F,0xE0,0x0C,0x40,0x32,0x80,
                  0xC7,0x00,0x0A,0x80,0x32,0x70,0xC6,0x20
              }
          };
      
          ssd1306_Fill(Black);
          for (size_t i = 0; i < sizeof(fonts)/sizeof(fonts[0]); i++) {
              ssd1306_DrawRegion(i * H + 32, 26, W, H, fonts[i], sizeof(fonts[0]), S);
          }
          ssd1306_UpdateScreen();
          sleep(1);
      }
      
      static void MainThread(void *arg)
      {
          IoTI2cInit(SSD1306_I2C_IDX, OLED_I2C_BAUDRATE);
      
          usleep(20*1000);
      
          printf("ssd1306_Init.\n");
          ssd1306_Init();
          ssd1306_Fill(Black);
          ssd1306_SetCursor(22, 27);
          ssd1306_DrawString("Hello XR806!", Font_7x10, White);
      
          uint32_t start = HAL_GetTick();
          ssd1306_UpdateScreen();
          uint32_t end = HAL_GetTick();
          printf("ssd1306_UpdateScreen, time cost: %d ms.\n", end - start);
      
          usleep(2000*1000);
      
          while (1) {
              DrawChinese();
          }
      }
      
      void OledMain(void)
      {
           if (OS_ThreadCreate(&g_main_thread, "MainThread", MainThread, NULL,
                      OS_THREAD_PRIO_APP, 4 * 1024) != OS_OK) {
               printf("[ERR] Create MainThread Failed\n");
           }
      }
      
      SYS_RUN(OledMain);
      

      运行效果
      最终OLED显示:您好鸿蒙
      1003546875-61b74f422e829.jfif

      参考资料
      【XR806开发板试用】系列之一 - Linux环境下Ubuntu完全开发流程
      https://xr806.docs.aw-ol.com/
      https://aijishu.com/a/1060000000256653

      本贴转自极术社区:https://aijishu.com/a/1060000000284333
      作者:H2O2_H2O2

      posted in XR806
      q1215200171
      budbool
    • 基于全志D1-H芯片的首台64位RISC-V便携式计算机上市

      近日,基于D1-H生态开发板的第一款RISC-V便携式计算机也已经宣布上市。

      技术开放社区Clockwork公司于近日宣布要推出一个由 RISC-V CPU驱动的DevTerm。这款设备被命名为 DevTerm R-01,售价为 239 美元,其配置主要如下:

      微信图片_20220328101620.png

      • ClockworkPi v3.14 主板
      • R-01 核心模块 ,RISC-V 64位单核 RV64IMAFDCVU @ 1.0GHz,1GB DDR3
      • Ext.模块
      • 6.86英寸 IPS 显示屏
      • Clockwork 65%比例的键盘
      • 电池模块
      • 双扬声器
      • 58毫米200dpi 热敏打印机组件
      • shell 和 bracket 系统
      • 带有 clockworkOS 的32GB 高速 TF 存储卡

      这款RISC-V便携式计算机一经推出便受到了RISC-V International CEO Calista Redmond 女士的青睐,“RISC-V生态快速发展,并可为开发者提供低成本且便捷易用的64 bit的RV终端。”

      ​微信图片_20220328101647.jpg

      RISC-V作为免费且灵活的开放指令集架构,在单片机和FPGA方面,已经取得了良好的开端。在商业落地方面,也开始应用在物联网安全、工业控制等领域。

      2021年4月,全志推出D1-H芯片,其是全球首颗量产的搭载平头哥玄铁906 RISC-V的应用处理器,为万物互联AIoT时代提供了新的智能关键芯片。

      D1-H搭载了阿里平头哥64位C906核心,支持RVV,1GHz+主频,可支持Linux、RTOS等系统。同时支持最高4K的H.265/H.264解码,内置一颗HiFi4 DSP,最高可外接2GB DDR3,可以应用于智慧城市、智能汽车、智能商显、智能家电、智能办公和科研教育等多个领域。

      全球首颗.png
      【国产芯片之光!】全志科技发布首颗RISC-V应用处理器

      2021年5月,全志携手平头哥发布基于玄铁C906处理器的全球首款支持64bit RISC-V指令集的D1-H哪吒开发板,为推动RISC-V生态在国内的发展贡献了厚重的力量。

      D1H哪吒.png

      微信公众号推文:基于全志D1-H芯片的首台64位RISC-V便携式计算机上市

      posted in D1-H/D1s
      q1215200171
      budbool
    • 【直播预告】全志XR806芯片应用实战分享

      37e3a7435fb2c2cc16a8a2a8266919b.jpg

      活动简介

      111111111.png
      XR806是全志科技研发设计的一款支持WiFi和BLE的IoT芯片,它采用了安谋科技自主研发的星辰“STAR-MC1”处理器,具有集成度高、硬件设计简单、BOM成本低、安全可靠等优点。可广泛满足智能家居、智慧楼宇、工业互联、儿童玩具、电子竞赛、极客DIY 等领域的无线连接需求。

      为了方便开发者自由开发和定制化,全志在线释放了包括完整系统源码、硬件原理图、bomlist、硬件位号图在内的全部软硬件资料。

      gittee仓库地址:https://gitee.com/awol/open-harmony_-xr806_manifest

      硬件资料下载地址:https://www.aw-ol.com/downloads?cat=12

      技术问题讨论地址:https://bbs.aw-ol.com

      活动报名及直播地址:https://aijishu.com/l/1110000000301384/join

      XR806优秀开发例程

      《基于OpenHarmony的棋子分拣机》

      《用全志XR806开源鸿蒙开发板做一个四足行走机器狗》

      《【XR806开发板实战】轻松连上华为云实现物联网》

      《在XR806开源鸿蒙开发板上移植LVGL》

      《在XR806上用ncnn跑神经网络mnist》

      posted in XR806
      q1215200171
      budbool
    • 技术流直播即将开始!“晕哥”带你玩转“玄铁杯”参赛开发板全志哪吒D1-H开发板

      微信图片_20220526094857.jpg

      • 讲座时间:2022-05-27 14:00 - 15:00
      • 报名方式:扫描海报二维码进入钉钉报名直播讲座
      • 主讲嘉宾:贺兴哇 -酷网主理人-全志在线开发者社区高级顾问
      • 讲座亮点:D1-H哪吒开发板相关介绍

      主讲嘉宾 贺兴

      哇酷网主理人
      全志在线开发者社区高级顾问

      东莞市哇酷科技有限公司创始人贺兴,人称晕哥,拥有个人管理的开发者社区——Whycan Forum(哇酷开发者社区),主要讨论全志Soc,因此同时也被全志在线开发者社区聘为高级顾问,晕哥十分热爱开源项目的分享,已就全志D1-H/D1s等芯片开源了不少优质项目,吸引了一大批开发者慕名而来。

      赛事详情

      2022“玄铁杯”RISC-V应用创新大赛正式启动,本次大赛分设“碳中和”、工业控制及机器人、视觉及可穿戴设备、智慧家居4条赛道,免费开放“云上实验室”助理参赛者探索开发不同领域的创新应用,感受RISC-V“算力自由”

      本次“玄铁杯”第二届RISC-V应用创新大赛即将于5月31日结束创意方案提交的阶段,目前已有1000+开发者基于全志D1-H哪吒和Sipeed Lichee D1-H DocK Pro两款开发板提交了300+份创意方案,方案从Linux和RTOS两种类型的操作系统出发,衍生出工业机器人、视觉及可穿戴设备、社区养老以及车载设备等时下最火热的赛道方案,赛事火爆程度可见一斑,开发者们赶快抓紧最后几天的上车机会,扫描参赛二维码,提交自己的创意方案。

      posted in D1-H/D1s
      q1215200171
      budbool
    • 稚晖君又整活啦!基于全志F1C200s的超迷你&低成本开发板开源

      微信图片_20220406175415.png
      B站最强小电视(基于全志H3)

      微信图片_20220406175412.png
      钢铁侠机械臂

      曾经靠着“B站最强小电视”以及号称“钢铁侠机械臂”等硬核产品出圈的稚晖君又双叒叕来整活啦!

      微信图片_20220406193401.png

      这次稚晖君开源了基于全志F1C200s的一个超迷你&低成本的Linux开发板,项目名为Planck Pi,F1C200s采用的ARM9架构,SIP内置DDR的极简封装很适合作为Linux开发入门板卡。

      1.jpg 2.jpg

      稚晖君在个人的github仓库开源了软硬件所有资料,该项目内核版本用的5.4.77,移植了Debian系统,跟Ubuntu基本没有差异。

      项目资料获取方式:
      Github链接:https://github.com/peng-zhihui/Planck-Pi

      项目说明

      本项目是一个基于全志F1C200s芯片的超迷你&低成本的Linux开发板,本来是用于个人的某个小项目调试,现把所有硬件、软件(u-boot、内核、root-fs)开源出来。板卡成本应该不到50RMB,而且提供了很多资料,很适合用于新手作为入门Linux学习的开发板。

      板载资源:

      • 一个OLED 128x80
      • 一个麦克风 & 功放可以外接喇叭
      • 双面不同功能的Type-C接口分别提供USB转串口以及USB-OTG功能
      • 一个USB-A口用于外接设备
      • SD卡插槽
      • 引出绝大部分IO

      芯片介绍

      全志F1C200s是全志的一款高度集成、低功耗的移动应用处理器,可用于多种多媒体音视频设备中。

      全志F1C200s基于ARM 9架构,芯片集成了SiP的DDR,外围电路可以极其简单;它支持高清视频解码,包括H.264、H.263、MPEG 1/2/4等,还集成了音频编解码器和I2S/PCM接口,是一款开发简单、性价比较高的产品,也适合用来做入门级的Linux开发板。

      参数规格
      微信图片_20220406182453.png

      芯片框图
      68747470733a2f2f70656e677a68696875692d6d61726b646f776e2e6f73732d636e2d7368616e676861692e616c6979756e63732e636f6d2f696d672f32303232303430353137323935352e706e67.png

      硬件开发

      3.jpg
      原理图见仓库的源文件和PDF,需要说明的点是:

      板子的Type-C采用正反插不同功能,正面是USB转TTL串口功能,用于内核调试,反面是芯片的USB功能,在内核中我开启了USB的RNDIS网卡也就是说可以通过这个USB口模拟出一个网卡然后共享电脑的网络,也就不需要外接WiFi和以太网模块了很方便。
      由于芯片只有一个USB接口,因此为了能使板子作为Host外接其他设备,我在板卡上添加了一个OTG的跳线:

      4.jpg
      正常情况下不接跳线的话OTG功能为Device模式,也就是可以通过TypeC接口模拟网卡或者其他设备如MTP;当插上跳线帽之后,就可以作为Host在右边的A口插入USB设备了如U盘、键盘、鼠标等,注意此时C口的USB功能失效,需要通过串口登录板子。

      项目资料目录

      微信图片_20220406183634.png

      posted in 全志方案讨论区
      q1215200171
      budbool
    • 【XR806开发板试用】在 xr806 上移植 LVGL

      不多废话,直接开搞,先上效果图

      2915332568-61de7071c3e19.jpg

      准备

      • 开发环境啥的,已经有很多文章了,这里就不再提搭建开发环境的相关内容了。
        一个屏幕(1.8' 128x160)
        1760544702-61de70b959d3e.jpg

      • LVGL源码(v8.0.2)
        (链接: https://github.com/lvgl/lvgl)

      开搞

      新建工程
      在ohosdome目录下新建一个工程"SPI_LCD",然后在工程文件加中添加"inc","src"文件夹和"BUILD.gn"文件,接着在src目录下创建"main.c"和"lcd.c",在inc目录下创建lcd.h,并将lvgl8.0.2源码也下载到工程目录下,如下图:
      3213853044-61dec39fc317f.jpg

      lcd.c 和 lcd.h,这两个文件是lcd屏幕的驱动文件,里面包含了lcd的驱动程序,这里主要看一下用于移植LVGL的刷屏函数lcd_flush:

      void lcd_flush(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t *color_p)
      {
        uint16_t w = x2 - x1 + 1;
        uint16_t h = y2 - y1 + 1;
        uint32_t draw_size = w * h;
      
        lcd_set_address(x1, y1, x2-1, y2-1);
        for (uint32_t i=0; i<draw_size; i++)
        {
            lcd_write_dat_16(color_p[i]);
        }
      }
      

      移植LVGL

      1、添加源文件
      将lvgl目录下(包括子目录)所有".c"文件的相对路径添加到"BUILD.gn"文件中,以加入编译,如下图所示(展示部分):
      3666675931-61dec5a1ddf3a.jpg

      2、添加头文件路径
      一样修改"BUILD.gn"文件,如下图所示(对于移植LVGL,主要是红框中的):
      2556107498-61dec61759925.jpg

      3、LVGL配置文件
      复制./lvgl/lv_conf_template.h为./lvgl/lv_conf.h,并作相应修改,主要修改如下:

      #define LV_COLOR_DEPTH                  16
      #define LV_TICK_CUSTOM_INCLUDE          "kernel/os/os_time.h"
      #define LV_TICK_CUSTOM_SYS_TIME_EXPR    (OS_GetTicks())
      

      LVGL显示设备注册

      复制./lvgl/examples/porting/lv_port_disp_template.c为./lvgl/examples/porting/lv_port_disp.c,并作相应修改,主要修改如下:

      1、启用条件编译
      3704885820-61dec83701042.jpg

      2、添加LCD驱动头文件
      492719688-61dec859f20b9.jpg

      3、创建LVGL显示缓存
      红框中的值可以适当做相应调整
      3965176505-61dec8773572c.jpg

      4、设置LVGL显示设备的参数
      主要设置屏幕的宽度与高度
      1600506850-61dec8b7e34b9.jpg

      5、添加初始化LCD屏幕代码
      783356945-61dec8da085df.jpg

      6、添加LVGL的LCD刷屏函数
      1009909891-61dec8f8b09b5.jpg

      LVGL初始化

      在应用程序的一开始,初始化LVGL和LVGL的显示设备,首先要导入LVGL的头文件:
      2841080138-61deca088be91.jpg 2064961015-61deca10c1fb8.jpg

      定时调用LVGL任务处理器

      创建一个任务来执行LVGL任务处理器
      这里可以适当的在while(1)中加一个LOS_Msleep(1) 感谢群友.ACE彭洪权的反馈
      1074938830-61decab5c0845.jpg

      测试

      至此LVGL就移植完毕了,接下来编译测试代码
      2558845562-61decb1eb353d.jpg
      上面代码就是使用LVGL提供的标签控件在屏幕上显示"Hello, XR806!",就如开篇的第一张图片。

      总结

      以上就是将LVGL移植到XR806上运行的整个流程,个人感觉XR806的编程体验还是挺好的,提供了各种外设的丰富驱动,可以方便开发者快速使用XR806实现功能。

      文章转自极术社区:https://aijishu.com/a/1060000000292988
      作者:25Hz.

      posted in XR806
      q1215200171
      budbool

    Latest posts made by q1215200171

    • 【FAQ】全志V系列芯片 Camera-WDR模式配置指南

      本文档提供V系列(V53x、V83x、V85x)SDK Camera-WDR模式的配置方法,其中主要内容包括:
      (1)Camera硬件条件支持
      (2)内核配置
      (3)WDR效果文件配置
      (4)MPP VI组件WDR模式配置
      (5)通路模式检查方法

      V系列Camera-WDR模式配置指南.pdf

      posted in 全志方案讨论区
      q1215200171
      budbool
    • 【FAQ】全志V853芯片 如何在Tina V85x平台切换sensor?

      目的

      V85x某方案目前默认Sensor是GC2053。实际使用时若需要用到GC4663(比如wdr功能)和SC530AI(支持500W),可按如下步骤完成切换。

      步骤

      下面以GC4663为例,SC530AI按相应方式适配。

      • Step1 检查Sensor驱动是否被编译成.ko文件
        GC4663 Sensor驱动文件gc4663_mipi.c和配置Sensor驱动编译的Makefile文件路径的路径:
        tina\lichee\linux-4.9\drivers\media\platform\sunxi-vin\modules\sensor
        修改配置Sensor驱动编译的Makefile文件:
        badd8248785d443697081edf9832fb5a.jfif

      添加后,重新mkernel即可编译出GC4663驱动的ko文件。
      fea9bceba2d343f795e9e87b6d0854e2.jfif

      • Step2 检查ISP效果文件是否已适配
        效果文件gc4663_mipi_wdr_default_v853.h路径:
        tina\external\eyesee-mpp\middleware\sun8iw21\media\LIBRARY\libisp\isp_cfg\SENSOR_H\gc4663
        效果文件解析文件isp_ini_parse.c路径:
        tina\external\eyesee-mpp\middleware\sun8iw21\media\LIBRARY\libisp\isp_cfg\

      若没有sensor对应的效果文件,则需要先添加和适配。

      适配后,通过make menuconfig修改sensor为gc4663。
      6ba18ae08ed94d9c82c4287be85e280d.jfif

      • Step3 检查board.dts是否已适配
        板级配置文件board.dts的路径:
        tina\device\config\chips\v853\configs\perf1
        cd8738d697024303abc0df74e8cd710c.jfif

      其中,I2C地址可以从GC4663 Sensor驱动中找到。
      tina\lichee\linux-4.9\drivers\media\platform\sunxi-vin\modules\sensor\gc4663_mipi.c
      4315d546df96410b842e83b42f17fb0c.jfif

      • Step4 修改ko自动加载脚本
        先将ko拷贝到/lib/modules/下,然后加载ko。
        (1)拷贝ko
        modules.mk的路径:
        tina\target\allwinner\v853-perf1
        02aa8ceffcd54e88b29f3b1da4ed89ef.jfif

      (2)加载ko
      S00mpp的路径:
      tina\target\allwinner\v853-perf1\busybox-init-base-files\etc\init.d
      ec50b82e7d93429da29f9b3e4672e389.jfif

      • Step5 重新编译mpp和固件

      重新编译mpp和固件的命令:

      cleanmpp && mkmpp && mp
      
      posted in 全志方案讨论区
      q1215200171
      budbool
    • Reply: V853 NPU 踩坑记录

      噢噢噢噢来了来了

      噢噢噢噢来了来了

      posted in V853
      q1215200171
      budbool
    • 【Sipeed D1 Dock Pro】YoC RTOS 实战:Lichee D1 Dock 开发板 Button按键

      原文链接:​https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300979.0.0.6719180famVQy0&id=4037255443398668288
      作者 @ 未来开发者

      1. 准备工作

      建议在操作前先阅读以下技术文章:

      Lichee D1 dock 开发板用户指南
      Lichee D1 dock 开发板快速上手教程

      2. 示例介绍

      本示例集成了各种基础控件。可以通过屏幕触控进行页面的操作。HaaS UI小程序相关的开发指南可以参考官方指南。

      3. 示例演示

      3.1 剑池CDK(以下简称CDK)演示

      3.1.1 示例获取

      双击打开CDK,点击工具栏最右侧的平头哥图标。点击新建工程按钮。

      06c1c559bd3bac9782b31c42e919f1d6.png

      在搜索栏里输入haasui, 在结果里选择haasui_falcon_demo,点击右侧的创建工程,版本选择v7.5.1。

      abc0838896f9e0c19b0fd286ee696886 (1).png

      3.1.2 编译
      右键点击haasui_falcon_demo工程,选择build,进行编译,直到结束。

      4120a0c278afaf99682723707ad9856f (1).png

      编译完成后,可以在工程目录下out文件夹里找到yoc_rtos_8M.img文件。

      3.1.3 下载

      • 通过CDK烧写

      先连接好硬件JTAG。然后点击红色框框处的按钮开始烧写。

      3012fb4810b2be7c5ed3496643dced6c (1).png

      b1ad944728198943ea3997509cedfb02 (1).png

      烧写完毕之后,按复位键即可启动。

      • 通过全志工具烧写

      在没有JTAG的情况下,只能通过全志的PhoenixSuit工具进行烧写。将编译出来的yoc_rtos_8M.img文件选中,

      36169ea9b80125d90db513688b890201 (1).png

      • 按住FEL按钮,重新上电后,重启后固件开始烧录,直到完成。

      • 如果当前镜像支持xfex模式烧写,直接在串口命令行执行“xfex"命令,再执行"reboot"命令进行重启,重启后固件开始烧录,直到完成。

      3.2 命令行演示
      3.2.1 示例获取

      docker-ubuntu18:~$ mkdir test
      docker-ubuntu18:~$ cd test
      docker-ubuntu18:~$ yoc init
      docker-ubuntu18:~$ yoc install sdk_app_d1 -b v7.5.1
      Start to install components...
      sdk_app_d1      (v7.5.1), clone https://gitee.com/yocop/sdk_app_d1.git ...
      …… (省略) ……
      d1_evb          (v7.5.1), clone https://gitee.com/yocop/d1_evb.git ...
      chip_d1         (v7.5.1), clone https://gitee.com/yocop/chip_d1.git ...
      Download components finish.
      docker-ubuntu18:~/test$ ls
      boards  components  solutions
      

      3.2.2 编译

      docker-ubuntu18:~/test/solutions$ cd haasui_falcon_demo
      docker-ubuntu18:~/test/solutions/haasui_falcon_demo$ make
      …… (省略) ……
      LINK out/haasui_falcon_demo/yoc.elf
      INSTALL yoc.elf
      riscv64-unknown-elf-objdump -d out/haasui_falcon_demo/yoc.elf > yoc.asm
      Generating yoc.bin
      scons: done building targets.
      YoC SDK Done
      [INFO] Create bin files
      update /home/shuta.lst/work/aone/yoc/dasai3/solutions/haasui_falcon_demo/data/resources
      [2022-02-23 16:12:39] Start to sign images with key:def_otp
      [2022-02-23 16:12:39] Sign [prim] with [def_otp]
      [2022-02-23 16:12:39] rsa verify ok....
      [2022-02-23 16:12:39] Sign prim ok.
      ----------------------------------------------------------------
                     boot0, 0, 0, 0x00000000, 0x0000c000, 0x0000c000, boot0
                       gpt, 0, 0, 0x0000c000, 0x00004000, 0x00010000, gpt
                      boot, 0, 0, 0x00010000, 0x00025000, 0x00035000, boot
                      imtb, 0, 0, 0x00035000, 0x00002000, 0x00037000, imtb
                      prim, 1, 0, 0x00037000, 0x00360000, 0x00397000, prim
                       lfs, 0, 0, 0x00397000, 0x00452000, 0x007e9000, lfs
                      misc, 0, 0, 0x007e9000, 0x00013000, 0x007fc000
                        kv, 0, 0, 0x007fc000, 0x00004000, 0x00800000
         boot0,    49152 bytes
           gpt,     8192 bytes
          boot,   143896 bytes
          prim,  1982620 bytes
           lfs,  4530176 bytes
          imtb,     8192 bytes
      ----------------------------------------------------------------
      Create yoc_rtos_8M.img in out directory Success!
      

      3.2.3 下载

      可以通过3.1.3的下载方式进行烧录,也可以通过命令行进行烧录。

      命令行烧录之前要先连接好T-HeadDebugServer。然后在终端输入make flashall命令:

      lh@lh:~/.../solutions/haasui_falcon_demo > make flashall
      [2022-02-17 10:29:22] I am RISC-V
      Program partition: boot0        address: 0x0, size 49152 byte
      erasing...
      program 00x0000c000, 100%
      Program partition: gpt          address: 0xc000, size 8192 byte
      erasing...
      program 00x0000e000, 100%
      Program partition: boot         address: 0x10000, size 143896 byte
      erasing...
      program 0x00032000, 100%
      Program partition: imtb         address: 0x35000, size 8192 byte
      erasing...
      program 00x00037000, 100%
      Program partition: prim         address: 0x37000, size 1966236 byte
      erasing...
      program 0x00217000, 100%
      Program partition: lfs          address: 0x397000, size 4530176 byte
      erasing...
      program 00x007e9000, 100%
      lh@lh:~/.../solutions/haasui_falcon_demo >
      

      4. 运行

      重新上电或按下RST键,系统启动,串口会有以下打印信息,表示系统运行成功。

      (cli-uart)# ###YoC###[Feb 17 2022,10:44:07]
      cpu clock is 1008000000Hz
      display init ok.
      haasui entry here!
      haasui build time: Feb 17 2022, 10:39:48
      [TP] GT9xx init
      
      [TP] start to probe![2, 0x5d]
      
      0X39 0X31 0X31 0X0 0X0
      
      [TP] Found chip gt911
      
      [TP] GT9xx Config version: 0x5C
      
      [TP] GT9xx Sensor id: 0x03
      

      4. 运行

      重新上电或按下RST键,系统启动,串口会有以下打印信息,表示系统运行成功。

      ###YoC###[Feb  7 2022,11:34:48]
      cpu clock is 1008000000Hz
      (cli-uart)# Run lradc test
      

      9ffc51776d2fc81afbcc665ac1c22106.png

      当按下对应的按键之后会有相应的打印信息输出:

      user key is pressed one times
      

      5. 总结

      本文介绍了DOCK开发板的按键使用示例,用户可以通过示例代码了解按键的简单触发机制

      ​

      posted in D1-H/D1s
      q1215200171
      budbool
    • 【FAQ】全志V853芯片 编码P帧帧内如何刷新功能检查?

      编码P帧帧内刷新功能检查方法

      H264

      使用Elescard StreamEye 4.6 工具(只支持H264),按如下截图配置后,开启P帧帧内刷新后,图像看到一个橙色的竖状矩形条,同时逐帧往后查看时矩形条会从左往右移动;关闭P帧帧内刷新后,则无此矩形条。

      dddbb14abf964b9486124575651f048a.jpg

      e26c4129ad2848b79d6c850f3fbefbaa.jpg

      H265

      使用YUView 工具(需要配置ffmpeg动态库)可分析H265文件,勾选Pred Mode后,可显示一个蓝色的竖状矩形条,同时逐帧往后查看时矩形条会从左往右移动;关闭P帧帧内刷新后,则无此矩形条。

      59ba6135b21b4192a20aa1c74796d9e9.jpg

      16d9605272f84316b7494538b94d37a1.jpg

      注:

      YUView 工具配置ffmpeg动态库

      为使YUView 工具分析能力更强,需要配置ffmpeg动态库。配置方法如下:

      abfd76df39c44be39d6b08933f34dc8c.jpg

      posted in 全志方案讨论区
      q1215200171
      budbool
    • 【FAQ】全志V853芯片 VE debugfs调试节点信息说明

      VE debugfs调试节点信息说明

      【调试信息】

      cat /sys/kernel/debug/mpp/ve
      ********Channal[0]: H265Enc Ver.07388090580d7ad94c897633057ff0806abf4340 F119********
      MainProfile, Level:186, BitRate:1048576, FrameRate:20
      Input:1920x1080, Output:2304x1296, RotAng:0
      Crop: Left:0, Top:0, Width:0, Height:0
      IDRPeriod:40, GopSize:2, NormalP, VBR, IpcCase, Colour
      InitQp:30, IQp[10~50], PQp[10~50]
      CurPQp:29, TargetBits:23424, RealBits:25920, BitRatio:110.66%
      Scene:1, Move:0, MovingLevel:0, BinImgRatio:0.32%, MovingTh:20
      AvgBitRate:3, RealBitRate:763, AvgFrmRate:0, RealFrmRate:21
      LBC:1, Lossy2X, y&yc_stride:1152,1728
      VbvSize:622592, Unused:619328, Valid:3264, ValidFrmNum:1
      Intra4x4:1, IntraInP:1, 3DNR:1
      Quality:10, IBitsCoef:10, PBitsCoef:10
      Mad[][10]:96.21 1.55 0.42 0.23 0.17 0.10 0.07 0.03 0.00 0.00 0.00 0.00
      Mad[0][]:3.83 4.90 39.77 30.91 10.06 3.28 1.81 0.83 0.45 0.36
      ClassifyTh[]:0 0 0 0 0 0 0 0 0 0 0 0
      Lambda:0.00, LambdaC:0.00, LambdaSqrt:0.00
      Intra: Coef{31 31 31}, Th{0 0 0}
      PredTend: Inter:16, Skip:16, Merge:20
      ********End Channal[0] H265Enc********
      ********Channal[1]: H264Enc Ver.07388090580d7ad94c897633057ff0806abf4340 F119********
      MainProfile, Level:51, BitRate:512000, FrameRate:20
      Input:640x360, Output:640x360, RotAng:0
      Crop: Left:0, Top:0, Width:0, Height:0
      IDRPeriod:60, NormalP, VBR, IpcCase, Colour
      InitQp:30, IQp[10~45], PQp[10~45]
      CurPQp:20, TargetBits:20894, RealBits:25648, BitRatio:122.75%
      Scene:0, Move:1, MovingLevel:1, BinImgRatio:1.55%, MovingTh:20
      AvgBitRate:585, RealBitRate:374, AvgFrmRate:21, RealFrmRate:21
      LBC:1, Lossy2X, y&yc_stride:384,576
      VbvSize:304128, Unused:300864, Valid:3264, ValidFrmNum:1
      Intra4x4:1, IntraInP:1, 3DNR:1
      Quality:10, IBitsCoef:10, PBitsCoef:10
      Mad[][10]:46.81 7.12 1.50 0.44 0.38 0.56 0.19 0.19 0.25 0.06 0.00 0.00
      Mad[0][]:1.31 5.94 7.38 3.81 4.75 5.50 7.31 4.81 3.62 2.38
      ClassifyTh[]:0 0 0 0 0 0 0 0 0 0 0 0
      ********End Channal[1] H264Enc********
      

      【参数说明】

      参数 描述
      Channal VE通道号,0/1/2/3
      EncType 编码类型,H264:H264Enc;H265:H265Enc
      Ver 编码库版本,对应的commit ID
      FrameCnt 编码帧的帧数,例如F119表示第119帧
      Profile 编码输出视频的档次,档次越高,允许使用的编码技术越丰富。H264低于High不能使用8x8转换,质量变差,如客户没具体要求,默认H264使用Hihg,H265使用Main。H264:Base/ Main/ High,H265:Main/ Main10/ MainStill
      Level 编码输出视频的等级,按照标准规定的分辨率和帧率而定。过往有些客户的机器出现解码高Level码流性能不足的情况,所以建议由编码库内部自适应配置。H264:定义在enum H264_LEVEL_E,H265:定义在enum H265_LEVEL_E
      BitRate 码率,单位bps
      FrameRate 帧率,单位fps
      Input 编码输入分辨率
      Output 编码输出分辨率
      RotAng 旋转角度
      Crop 裁剪坐标
      IDRPeriod I帧周期
      GopSize 编码参考集大小,该参数不影响码率控制,H265的该参数会影响某些解码器的参考帧内存预分配,建议统一配置成2。
      FixQp 固定I/P帧Qp,仅在RcMode选择FixQp时生效
      InitQp RcMode为非FixQp下,首个I帧Qp
      IQp I帧Qp取值范围
      PQp P帧Qp取值范围
      TargetBits 当前帧目标bit数
      RealBits 当前帧实际bit数
      BitRatio bit数比例 = 100 * RealBits / TargetBits
      Scene 纹理复杂程度的等级,[0,2]
      Move 运动复杂程度的等级,[0,4]
      MovingLevel 场景变化剧烈程度等级,[0,3]
      BinImgRatio SAD超过MovingTh的8x8块数量比例,[0%,100%]
      MovingTh 8x8块SAD阈值,[10,31]
      AvrBitRate 到目前为止的平均码率,按编码器拿到的VIBuffer的时间戳每隔一秒更新一次
      RealBitRate 实际最近一秒内的瞬时码率,按编码器拿到的VIBuffer的时间戳每隔一秒更新一次
      AvgFrmRate 到目前为止的平均帧率,按编码器拿到的VIBuffer的时间戳每隔一秒更新一次
      RealFrmRate 实际最近一秒内的瞬时帧率,按编码器拿到的VIBuffer的时间戳每隔一秒更新一次
      AFBC VI使用LBC的开关,[0,1]
      LBC VI使用LBC的开关,[0,1]
      VbvSize 编码器输出Buffer长度
      Unused VbvBuffer剩余可用空间
      Valid VbvBuffer已占用空间
      ValidFrmNum 占用VbvBuffer未归还的帧数量
      Intra4x4 帧内4x4块预测开关,[0,1]
      IntraInP P帧使用帧内预测开关,[0,1]
      3DNR 编码器3D滤波开关,[0,1]
      Quality 静止场景下的P帧bit数比重,按10为100%计算,[0,20]
      IBitsCoef I帧bit数比重,按10为100%计算,[1,20]
      PBitsCoef 运动场景下P帧bit数比重,按10为100%计算,[1,50]
      Mad[][10] 纹理MAD直方图比例分布,以10为步长
      Mad[0][] 纹理MAD在10以内的直方图比例分布,以1为步长
      ClassifyTh MB级码控分类阈值
      Lambda H265编码器Lambda值,H264:无效,V853的H265无效
      LambdaC H265编码器LambdaC值,H264:无效,V853的H265无效
      LambdaSqrt H265编码器LambdaSqrt值,H264:无效,V853的H265无效
      IntraCoef 帧内分块决策系数,三个系数分别对应32x32、16x16、8x8块,系数越大,越倾向于分小块,H264:无效,H265:[0,31]
      IntraTh 帧内分块决策MAD阈值,三个阈值分别对应32x32、16x16、8x8块,阈值越小,越倾向于分小块,H264:无效,H265:[0,127]
      PredTendInter Inter预测模式倾向系数,系数越小,越倾向于Inter预测,H264:无效,H265:[0,63]
      PredTendSkip Skip预测模式倾向系数,系数越小,越倾向于Skip预测,H264:无效,H265:[0,63]
      PredTendMerge Merge预测模式倾向系数,系数越小,越倾向于Merge预测,H264:无效,H265:[0,36]

      【调试方法】

      app运行结束后,支持查看VE debugfs调试信息功能的开启方法。

      默认情况下,app运行结束后,通过 cat /sys/kernel/debug/mpp/ve 无法继续查看ve的debugfs调试信息。

      在app运行前执行命令 echo 1 > /sys/kernel/debug/mpp/ve 可开启该功能。
      平台重启后,修改会自动失效,需要重新打开。

      执行命令 echo 0 > /sys/kernel/debug/mpp/ve 可恢复默认情况。

      posted in 全志方案讨论区
      q1215200171
      budbool
    • 【FAQ】全志V853芯片 swap功能简介与tina上swap分区使用方法

      swap功能简介

      1、概念介绍

      swap:系统内存紧张时进行的内存回收操作。

      swap分区:在swap内存回收操作中,被回收的匿名页会回写到swap分区。

      系统没有swap分区的时候,依旧会进行swap操作,swap操作不一定会操作到swap分区。

      2、swap分区介绍

      linux系统支持各种块设备、文件作为swap分区,且容量可以叠加。比如同时使用spinor上的swap裸分区和TF卡上的文件叠加作为swap分区。申请成功的swap容量可以通过free命令查看.

      ​             total       used       free     shared    buffers     cached
      Mem:        511776     506952       4824          0        512        836
      -/+ buffers/cache:     505604       6172
      Swap:         1020         44        976
      

      各存储基于TINA SDK使用swap的方法

      1、swap分区使用方法

      swap分区的使能依赖mkswap命令和swapon命令。对于TINA SDK大部分存储来说。只需要make menuconfig选中mkswap、swapon命令,且在sys_partition(_nor).fex分区表中分配一个作为swap分区的裸分区即可。

      root@(none):/# free
                   total       used       free     shared    buffers     cached
      Mem:        511776      16820     494956          0       1260       2068
      -/+ buffers/cache:      13492     498284
      Swap:            0          0          0
      
      root@(none):/# mkswap /dev/by-name/swap
      Setting up swapspace version 1, size = 1020 KiB
      no label, UUID=c714a274-5c8b-44e9-87f0-e6ce39226621
      
      root@(none):/# swapon /dev/by-name/swap
      [  223.756712] Adding 1020k swap on /dev/by-name/swap.  Priority:-1 extents:1 across:1020k SS
      root@(none):/# free
                   total       used       free     shared    buffers     cached
      Mem:        511776      16820     494956          0       1356       2128
      -/+ buffers/cache:      13336     498440
      Swap:         1020          0       1020
      

      2、存储使用差异

      大部分存储都可以使用上文介绍的方式来使能swap分区,mkswap的前提是你可以获得一个可读可写的块设备/文件,比如mtdblockn、mmcblk0pn、nandn。

      对于ubi nand来说,tina系统默认使用squashfs+ubifs来获得一个可读写的overlay,其中squashfs就依赖于块设备,但对于ubi nand来说,提供给squashfs的ubiblock必须是只读的,只读的ubiblock+只读文件系统squashfs的搭配。所以尽管在用户态可以创建出ubiblock,创建出来的ubiblock也是只读的,不满足mkswap的需求。此时尝试基于可读写的overlay创建文件,利用ubifs上的文件来作为swap,测试发现mkswap可以成功,但是并不能swapon。

      基于以上,提出了两种方法:

      (1)直接不使用ubi nand的逻辑分区,即不使用mtdblock上的ubiblock,直接使用mtdblock,操作底层的物理块设备,pstore/blk在ubi nand上也是此种做法,但是这种做法的风险点在于,mtdblock并没有磨损平衡,只有坏块处理。所以对应的swap分区寿命不长。

      (2)不使用tina squashfs+overlay的做法,直接使用mkfs.ubifs制作一个可读可写的rootfs,内核关闭readonly-ubi块的配置,让系统可以顺利创建出可读可写的ubiblock。但是需要牺牲根文件系统只读的功能,在掉电等存储不稳定的场景下,根文件系统有可能被损坏。在保证存储稳定性的情况下,这种方法应该是优选。

      小知识

      1、swap分区没有被用完,为什么依旧会oom

      内核触发kswapd进行内存回收时,会对匿名页和文件页进行回收(有更多仲裁方法,不展开叙述),其中文件页的回收方法是清除缓存的文件内容,并不需要回写flash,因为文件页的实际文件一直保存在flash中,下一次读文件时,需要重新从flash中读回文件,无法直接从缓存中获取文件内容;匿名页的回收方法是写到swap分区(当存在swap分区的时候)。所以当你内存临界,且在系统仲裁下已经没有可以回收的匿名页时,尽管swap分区没有用完,依旧会触发oom。

      2、CPU占用率和内存的取舍

      /proc/sys/vm/swappiness节点描述系统对swap分区的使用原则,0表示最大限度使用物理内存,100表示最大限度使用swap分区。在内存紧张的情况下,可以使用swap分区,但是频繁使用swap分区必然导致CPU占用率的升高,此时可以通过调节swappiness节点来对CPU占用率和内存进行平衡。

      posted in 全志方案讨论区
      q1215200171
      budbool
    • 【FAQ】全志V系列芯片 如何生成拍照缩略图和视频缩略图?

      适用范围

      只适用于V系列,并使用MPP多媒体框架。

      拍照缩略图的处理

      设置JPEG编码生成缩略图
      在创建一个JPEG编码的通路时,想要同时生成缩略图,其实很简单,只需要在调用AW_MPI_VENC_SendFrame之前调用AW_MPI_VENC_SetJpegExifInfo设置缩略图属性即可。

      VENC_EXIFINFO_S stExifInfo;
      memset(&stExifInfo, 0, sizeof(VENC_EXIFINFO_S));
      stExifInfo.ThumbWidth = thumbnailWidth;
      stExifInfo.ThumbHeight = thumbnailHeight;
      stExifInfo.thumb_quality = thumbnailQuality;
      stExifInfo.Orientation = mJpegRotate;
      AW_MPI_VENC_SetJpegExifInfo(vechn, &stExifInfo);
      AW_MPI_VENC_SendFrame(vechn, &frmInfo);
      

      获取缩略图

      通过调用接口AW_MPI_VENC_GetJpegThumbBuffer,我们可以得到缩略图buffer的起始指针,和其大小。需要注意的是,缩略图并不是单独的buffer,而是保存在整个JPEG图像数据中的。

      我们可以通过比较缩略的起始地址指针和JPEG图像数据的起始指针,得到其在JEPG文件中的偏移位置。同时由于JPEG文件的格式,我们可以在保存JPEG文件时,将得出的缩略图偏移量和大小写入到文件尾部,当需要缩略图去显示的时候,能更方便的获取到缩略图数据。

      int getThumbOffset(VENC_STREAM_S *pVencStream, VENC_JPEG_THUMB_BUFFER_S *pThumbBuf, off_t *pThumbOffset)
      {
          if (NULL == pVencStream || NULL == pThumbBuf)
          {
              aloge("fatal error! why parameter is null!");
              return -1;
          }
      
          if (pThumbBuf->ThumbAddrVir >= pVencStream->mpPack[0].mpAddr0 && \
              pThumbBuf->ThumbAddrVir < pVencStream->mpPack[0].mpAddr0+pVencStream->mpPack[0].mLen0)
          {
              *pThumbOffset = pThumbBuf->ThumbAddrVir - pVencStream->mpPack[0].mpAddr0;
          }
          else if (pThumbBuf->ThumbAddrVir >= pVencStream->mpPack[0].mpAddr1 && \
              pThumbBuf->ThumbAddrVir < pVencStream->mpPack[0].mpAddr1+pVencStream->mpPack[0].mLen1)
          {
              *pThumbOffset = pThumbBuf->ThumbAddrVir - pVencStream->mpPack[0].mpAddr1;
          }
      
          alogd("get thumb offet[%lld]", *pThumbOffset);
      
          return 0;
      }
      

      视频生成缩略图

      视频生成缩略图的方法是通过demux组件解析一帧图像,送入解码器,将其解码为YUV图像,再将其送入编码器缩放编码为较小的图像作为视频的缩略图。

      demux -> vdec -> venc -> jpeg
      

      详细的实现流程可以参考 softwinner/eyesee-mpp/framework/v316/demo/sample_ThumbRetriever下的sample_ThumbRetriever和eyesee-mpp/framework/v316/media/thumbretriever路径下的EyeseeThumbRetriever类的实现流程。

      posted in 全志方案讨论区
      q1215200171
      budbool
    • 【FAQ】全志V853芯片 如何支持ssh功能?

      1 问题背景

      v853有客户需要使用到ssh服务,使用该服务来进行文件传输或者系统登陆。

      2 问题描述

      v853有客户需要使用到ssh服务,使用该服务来进行文件传输或者系统登陆。但在开发的过程中发现ssh的基本功能使用不了,包括使用ssh进行远程登录,和使用scp进行文件传输。

      3 解决办法

      3.1 编译ssh包,如下配置后进行编译即可编译ssh相关工具

      make menuconfig
       --> network
         --> ssh
           -*- openssh-client
           <*> openssh-client-utils
           -*- openssh-keygen
           < > openssh-moduli
           <*> openssh-server
           <*> openssh-server-pam
      

      3.2 添加sshd账号

      1.系统起来后启动/usr/sbin/sshd服务可能会失败,因为此时没有sshd账号,因此需要创建一个sshd账号

      2.在/etc/passwd文件中添加sshd账号信息,如下:

      sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/bin/ash
      

      注意:该信息需要根据系统实际情况进行改动,例如在v853中使用的是ash shell,但其他方案中不一定使用的是ash shell

      3.使用ssh-keygen命令创建3个key

      ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
      ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
      ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
      

      4.mkdir /var/empty/sshd --> 创建sshd账号的工作目录

      5.使用passwd命令给sshd账号添加密码。

      6.在小机端执行命令/usr/sbin/sshd启动ssh服务

      7.执行完上面的操作后即可在pc端使用ssh工具使用sshd账号远程登录小机端了。

      3.3 以root用户登录小机端

      上面的操作只能以sshd账号登录到小机端,sshd账号权限有限,在开发阶段很多操作都做不了,因此一般需要使用root用户进行登录,

      执行下面的操作后即可以root用户进行登录

      1.使用passwd命令给root账号添加密码,一般新烧的系统root账号是没有设定密码的,在tina系统中使用passwd命令修改的密码是保存在/etc/passwd文件中的。

      2.rm /etc/shadow(tina v853方案中要删除shadow里root账号信息,否则远程登录时使用的是shadow里的密码,但该密码不清楚是什么,该密码与/etc/passwd中的密码有覆盖现象)

      3.修改/etc/ssh/sshd_config文件,添加PermitRootLogin yes配置项(该配置项是允许ssh以root账号登录)

      4.如果此前sshd服务已开启,那么重启sshd服务,到此可以以root账号登录小机端了。

      3.4 使用scp工具进行文件传输

      在开发阶段一般scp要以root账户去进行文件的传输,否则很容易因文件权限的问题导致传输失败,因此在使用scp时最好已调通以root用户进行登录。

      1.tina SDK中的package/network/openssh包里把scp和ssh工具名字修改为了openssh-ssh和openssh-scp了,在window系统中使用scp命令上传或下载文件会报错。

      2.报错原因是小机端找不到scp工具,因此需要把package/network/openssh包里的openssh-scp工具名字修改回scp即可

      (修改package/network/openssh/Makefile文件)

      注意:该问题是pc端是window系统时发现的,其他系统作为登录端时可能不需要,可以自行进行测试。

      4.问题总结

      v853方案使用上面方法可以使用ssh功能,其他方案因系统(例如shell,busboy)等原因需要根据实际情况进行修改(可以参考上面的做法)。

      posted in 全志方案讨论区
      q1215200171
      budbool
    • 【FAQ】全志V853芯片 Tina获取各个分区编译好后的分区镜像文件[脚本]

      [需求描述]

      做SDK对接过程作,应用开发有可能需要自己制作升级固件(OTA,烧录)。这就需要从SDK中找出编译好的各个分区镜像文件。本FAQ提供一个脚本,将各个分区已经编译好的镜像分区给拷贝到一个固定地方。

      [脚本安装方法]

      将附件中内容按照目录替换到sdk的相应目录当中。
      目录:scripts/.hooks (如.hooks 目录不存在,在需要创建)

      scripts/.hooks 
          |_post-pack
          |_pack_script
              |_aw_pack.sh
      

      [使用方法]

      安装完成后,直接按正常使用那样,执行pack 脚本进行打包,打包成功后回有打印:

      /home/v833-sdk/out/v831_pro_ipc/image/…/aw_pack_src

      [工具生成的目录介绍]

      ├── aw_pack.sh     #执行该脚本即可再进行打包,并输出在当前目录的out目录 
      ├── config              #打包的配置文件
      ├── image              #各种分区镜像文件,可以替换,请勿改名
      │   ├── boot0_nand.fex            #boot0 的nand镜像
      │   ├── boot0_sdcard.fex         #boot0 的SD卡镜像
      │   ├── boot0_spinor.fex          #boot0 的spinor镜像
      │   ├── boot.fex                        #内核镜像
      │   ├── boot_package.fex        # uboot打包镜像
      │   ├── boot_package_nor.fe   # uboot 在spinor方案上的打包镜像
      │   ├── env_nor.fex                  #env环境变量镜像
      │   ├── rootfs.fex                      #rootfs 镜像
      │   ├── sunxi.fex                       #GTP分区表
      │   └── other.fex                       #其他分区镜像
      ├── other        #打包所需的其他文件 
      ├── out           #执行aw_pack.sh脚本后输出的目录
      ├── tmp          #临时目录,用于打包时使用
      └── tools        #打包时需要的linux 工具
      

      脚本文件:aw_pack_src.tar.gz

      posted in 全志方案讨论区
      q1215200171
      budbool