导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. aldfaaa
    • 资料
    • 关注 7
    • 粉丝 4
    • 我的积分 6728
    • 主题 21
    • 帖子 150
    • 最佳 27
    • 群组 0

    whycan矿工-小叶LV 7

    @aldfaaa

    一名专业的坑网矿工

    6728
    积分
    52
    声望
    128
    资料浏览
    150
    帖子
    4
    粉丝
    7
    关注
    注册时间 最后登录
    位置 广东佛山 年龄 28

    aldfaaa 取消关注 关注

    aldfaaa 发布的最佳帖子

    • 【哪吒开发板】Tina Linux SPI主从通信验证实录

      背景

      • 主控: D1H
      • 板卡: 两块哪吒开发板(以下简称为主机, 从机)
      • 操作系统: Tina Linux 2.0

      问题

      验证D1H芯片SPI主从机通信.

      硬件接线

      主机SPI 从机SPI
      19 SPI1_MOSI SPI1_MOSI 19
      21 SPI1_MISO SPI1_MISO 21
      23 SPI1_SCK SPI1_SCK 23
      24 SPI1_CE SPI1_CE 24

      SPI概述

      SPI接口是一种高速的, 全双工, 同步的通信总线.
      适配D1H芯片的Tina Linux的BSP-SDK(以下简称SDK)中已包含相关驱动文件: spi-sunxi.c.
      它提供的了仅内核态下主从机的简易通信验证实验, 这或许是考虑到SPI通信速率比较高的特性.
      验证操作

      SPI主机配置

      menuconfig

      在SDK执行完环境变量加载后, 执行:

      /mnt/tina-d1-h$ make kernel_menuconfig
      

      ●开启Device Drivers->SPI support
      ●进入SPI support, 按图示开启:

      a3e582cc-6f51-438d-b11a-3cb23ca9e549-image.png

      设备树

      修改: ./device/config/chips/d1-h/configs/nezha/board.dts
      c4c8f396-f82e-41c2-8984-0a987b241a53-image2.png

      需要根据手册和原理图确认好针脚功能:
      4ac61953-9fca-457c-8e5a-915d37c7ba37-微信截图_20230228111727.png

      SPI从机配置

      menuconfig

      (同SPI主机配置一致)

      设备树

      仅spi_slave_mode设为0, 其余项同SPI主机配置一致. spi_slave_mode = <0>;

      SPI主机收发信息

      按上述配置, 重新编译SDK, 打包, 烧录, 启动设备会出现:

      root@TinaLinux# ls -l /dev/spidev1.0
      crw-------    1 root     root      153,   0 Jan  1 08:00 /dev/spidev1.0
      

      然后将可执行的SPI测试程序(./lichee/linux-5.4/tools/spi/spidev_test)挪到设备上(adb push等)并赋予可执行权限:

      # 主机以10MHz发送(即MOSI)发送16进制数据: 0x01 0x02 0x03 0x04
      ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x01\x02\x03\x04" 
      # 主机以10MHz发送(即MOSI)发送ASCII字符串数据: "allwinner"
      ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p  "allwinner"
      spi mode: 0x0
      bits per word: 8
      max speed: 10000000 Hz (10000 KHz)
      TX | 61 6C 6C 77 69 6E 6E 65 72 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  |allwinner|
      

      注意SPI是同步通信接口, 所以在发送的同时也会接收同样长度字节的数据.
      下文将用到SPI主从通信的一种常见做法: 主机先发指令头, 然后再发指令体以获取从机应答.

      SPI从机收发信息

      spi-sunxi.c中对SPI从机模(SLAVE_MODE)采取了简单的收发验证处理, 具体是创建一个内核线程执行int sunxi_spi_slave_task(void *data), 该函数又被设备中断所控制(当收到SPI数据时).

      • SPI从机接收到数据的主要流程:
        sunxi_spi_slave_task() -> sunxi_spi_slave_handle_head(), 然后:
        若指令头是写操作(0x01), 则执行:sunxi_spi_slave_cpu_rx_config(), 该函数仅是输出写入内容.
        若指令投是读操作(0x03), 则执行:sunxi_spi_slave_cpu_tx_config(), 该函数仅是将收到的指令体的值+0x80, 然后发送(MISO)给主机.

      • 对于从机, spi-sunxi.c能验证SPI通信, 但没有可供用户层直接使用的方法.

      用户层可验证的SPI从机收发方案

      功能设计

      从机安排一块32byte的内存缓存空间(简称"缓存空间")供主机通过指令进行读操作和写操作, 且从机能在用户层对该内存空间访问.

      主要改动

      • spi.c:
        • 增加static struct class_attribute ye_spi_buf_attrs[], 以创建/sys/class/spi_slave目录下的spi_buf文件, 并提供实现了读/写缓存空间的方法.
      • spi-sunxi.c:
        • 使用ye_spi_slave_set_txdata()方法替换sunxi_spi_slave_set_txdata(), 以实现读操作.
        • 修改sunxi_spi_slave_cpu_rx_config()方法, 以实现写操作.

      改动详情请查看: d1h_spi_driver.diff

      使用方法

      写操作: 操作:0x01(写) 地址:0x00 0x00 0x00 指令体长度:0x09
      ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x01\x00\x00\x00\x09" && \
      ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p  "allwinner"
      
      读操作: 操作:0x03(读) 地址:0x00 0x00 0x00 指令体长度:0x09
      ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x03\x00\x00\x00\x09" && \
      ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p  "\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      
      从机读取缓存空间:
      cat /sys/class/spi_slave/spi_buf
      
      从机写入缓存空间:
      echo "Hello world" > /sys/class/spi_slave/spi_buf
      
      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 【哪吒开发板】Tina Linux SPI主从通信验证实录

      工具和镜像:
      spidev_test
      tina_d1-h-nezha_uart0_spi_master_slave.zip

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • "RISC-V嵌入式开发线下交流会"4K高清实录

      2023年4月9日, 深圳OP ACCELERATOR, 百问网联合深圳开源技术服务中心举办了《RISC-V嵌入式开发线下交流会》:
      微信图片_20230409225506.jpg

      就在滨海鹅厂附近 (
      ec36a7ee-e495-4e99-8ee8-2a65a6f877b2-119c5514ac5004bf0ee26cf24b8cf49.jpg

      大会开始前, 琳琅满目的奖品, 开发板和技术书籍:
      20230409142726_IMG_1297.JPG

      20230409142827_IMG_1298.JPG

      韦东山老师的精彩演讲:
      55e7c7a5-34e8-45a9-9773-8248655899ce-c5084135fa217b3cbe8921ff180a909.jpg

      06c62b0d-8fcd-4256-b655-b0078cdeb917-20230409154631_IMG_1300.JPG

      本坛坛主的精彩演讲
      20230409163148_IMG_1302.JPG

      杨源鑫大佬(订阅号: 嵌入式研究院)的分享
      20230409164652_IMG_1304.JPG

      晕哥颜值撑场
      20230409164204_IMG_1303.JPG

      双倍多多冰, 我, 韦东山老师和晕哥的合影:
      20230409174209_IMG_1310.JPG

      现场伙伴提出的部分问题:

      • 应用都需要重新编译一次, 如何构建RISC-V软件生态?
      • 嵌入式Python numpy库存在问题?
      • 各架构的系统性调试技能课程?
      • 为什么MCU开发很少做到"低内聚高耦合"?
      • 实际项目应用中, RTOS和LINUX该如何选择与评估?
      • RISC-V对如航空领域的高可靠的嵌入式开发有什么帮助?
      • 怎么看到RISC-V碎片化问题?
      • 中小学生有没有机会和条件接触, 甚至学习到RISC-V?

      ....

      没提及疑问的可以发帖补充, 懂的大佬恳请慷慨回帖哈~

      发布在 灌水区
      aldfaaa
      whycan矿工-小叶
    • Tina通过命令行连接WiFi

      首先配置wpa_supplicant的配置文件:/etc/wifi/ake.conf

      ctrl_interface=/var/run/wpa_supplicant
      update_config=1
      network={
              ssid="(SSID)"
              psk="(PWD)"
      }
      

      然后

      # 主要连接操作
       wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wifi/ake.conf -B
      # 通过DHCP服务获得IP地址等信息
      udhcpc -i wlan0 -B
      
      # 搜索WIFI
      wpa_cli -iwlan0 scan
      wpa_cli -iwlan0 scan_result
      
      # 检查WiFi连接状态
      wpa_cli -iwlan0 status
      
      

      WiFi已连接的应答

      ttt.png

      想开机配置网络和WiFi, 可以修改/etc/init.d/wpa_supplicant文件第48行左右:

      if [ x$brlan=="xbr-lan" ]; then
          echo "change the default ip address 192.168.1.1"
          ifconfig br-lan 192.168.100.1
          # 加你所想操作的指令
      fi
      
      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 【XR806官方开发板入门】openHarmony编译与烧录

      【XR806官方开发板入门】openHarmony编译与烧录

      非常感谢AW陈老板赠与XR806开发板~~~
      期望未来线下面基活动不会太晚.

      首先画重点:
      【严重警告】不要用全志客户服务平台Freertos v1.2版本编出来的固件烧到XR806开源鸿蒙开发板
      由于我鸽子特性, 所以前一段时间我卡在了openharmony(简称OH)开发路线上, 所以避开了官方RTOS这坑.

      OH开发路线我断断续续地摸索了2天

      • 一是文档教程分散且有多个版本(见 参考文献);
      • 二是估计OH官方库跟XR806的适配出现了一些分歧, 两者没有合并在一起.

      平台

      原生Ubuntu 20.04

      资源

      先建个文件夹, 边下载边往下看

      mkdir xradio && cd ~/xradio
      

      gn

      需要下载gn-linux-x86-1717.tar.gz工具. 链接忘了
      放到

      ~/gn目录下, 并加入环境变量
      

      工具链

      Linux: gcc-arm-none-eabi-10-2020-q4-major

      下载解压, 加不加到PATH不要紧. 因为OH依靠ninja工具构建. 只要将工具链路径(gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/bin)加入

      特定库

      devboard_device_allwinner_xr806

      git@gitee.com:moldy-potato-chips/devboard_device_allwinner_xr806.git
      

      devboard_vendor_allwinner_xr806

      git@gitee.com:moldy-potato-chips/devboard_vendor_allwinner_xr806.git
      

      以上两个库是早期从OH库特定分支fork下来的. 个人认为可能是最新的OH官方库与xr806适配方式存在一些分歧, 所以导致官方教程的里repo sync时无法同步到特定目录(库).

      下载完之后xradio目录应该为:

      xradio
      ├── devboard_device_allwinner_xr806
      ├── devboard_vendor_allwinner_xr806
      └── gcc-arm-none-eabi-10-2020-q4-major
      

      OH

      先来看看官方教程, 然而并不能正常repo sync(21/03/06之前)

      mkdir openharmony
      cd 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'   #下载部分大容量二进制文件
      

      问题出现在

      -m devboard_xr806.xml
      

      所以直接取得OpenHarmony_1.0.1_release分支OH仓即可:

      repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify
      repo sync -c
      repo forall -c 'git lfs pull'
      

      注意xr806仅适配特定分支的OH系统.

      整合目录★★★

      以下操作是为了弥补该分支OH仓的一些差异.
      估计是OH官方仓作了一些修改没法向前兼容XR806的适配.

      # 若~/openharmony/device/xradio目录已存在, 则可备份一下.
      # 复制device库
      cp -rfa ~/xradio/devboard_device_allwinner_xr806 ~/openharmony/device/xradio
      
      # 复制vender库
      cp -rfa ~/xradio/devboard_vendor_allwinner_xr806 ~/openharmony/vendor/xradio
      

      配置工具链

      cd ~/openharmony

      修改:
      device/board/allwinner/xradio
      device/xradio/xr806/liteos_m/config.gni +37

      # Compiler prefix.
      board_toolchain_prefix = "~/xradio/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-"
      

      修改:

      device/xradio/xr806/xr_skylark/gcc.mk

      CC_DIR := ~/xradio/gcc-arm-none-eabi-10-2020-q4-major/bin
      

      编译注意事项

      hb工具选择兼容XR806的版本

      hb是构件OHOS的python工具. 它位于openharmony/build/lite/hb.

      hb最新版本不兼容编译XR806 SDK, 所以必须使用b765e35分支的hb工具, 即对应OH仓OpenHarmony_1.0.1_release分支的版本.

      git reset --hard b765e35
      # 在openharmony目录下执行安装才会替换hb
      python3 -m pip install --user build/lite
      

      编译SDK

      编译前要包含一下要编译的程序, 比如

      ~/openharmony/device/xradio/xr806/ohosdemo/hello_demo

      需要修改一些Build.gn...
      详细见官方教程和OH仓吧...
      还有一些生成文件需要注意:

      openharmony/device/xradio/xr806/liteos_m/SDKconfig.gni
      

      编译

      hb set 然后按一下回车出现:

      a.png !imga

      选择wifi_skylark@xradio选项.
      然后

      hb build -f -c gcc
      

      见success即可.

      烧录

      记得按官方教程打上 配置里的勾勾.
      QQ图片20220319135527.png

      参考文献

      [1] XR806使用安装包方式搭建编译环境

      [2] 系统下载与编译

      发布在 Wireless & Analog Series
      aldfaaa
      whycan矿工-小叶
    • 回复: "RISC-V嵌入式开发线下交流会"4K高清实录

      会后的韦东山老师与笨叔学者的合影
      微信图片_20230410105651.jpg

      嘉宾合影:
      微信图片_20230410105948.jpg

      全场大合照:
      54f6ac40-16fd-4fb5-a56a-286ef56b4ac2-微信图片_20230410105929.jpg

      发布在 灌水区
      aldfaaa
      whycan矿工-小叶
    • 游戏引擎第一步:D1跑tinyGL

      某天刷文章认识到了一位比肩Linus Torvalds的神人---QEMU, FFMPEG等神器作者法国程序猿Fabrice Bellard, 敬仰之余, 发现他手下有个OpenGL的开源子集实现tinyGL. 粗看代码感觉不算复杂

      恰好手头上有个哪吒D1-H又没有GPU, 就把tinyGL移植了一下, 把牛当马使, 顺便摸摸D1-H性能的天花板.

      先上效果图

      默认分辨率大概47帧左右. (其实如果不搬RGB到fb可以上百帧)

      打满官方MIPI屏分辨率(800x1280), 大概19帧左右.

      运行该程序, D1-H终于有点发烧的感觉了, 也不算烫手.(估计还得再压个tinaplayer硬解4k)

      修改要点

      • 乱七八糟地魔改了一下Makefile, 里面的路径大家自己跟自家用的SDK对一下. ;
      • 顺手牵羊几份SDK里的fbviewer的源码,

      交叉编译

      1. 先make src目录下的源码, 得到库
      2. 再make RawDemos目录下可执行程序

      github有个大伙优化的原始tinyGL原始版: https://github.com/C-Chads/tinygl

      我魔改移植到D1的tinyGL: https://gitee.com/YJHmath/tinygl-d1

      想拿程序去玩的:
      Raw_demos.zip

      坑点

      1. 填-march=native或者-march=rv64imafdc会导致编译出来的程序无法运行, 解决方法: 不填, 让编译器默认.

      2. 因为用了lp64d/libm.a, 所以指定了-mabi=lp64d, 但也不清楚生没生效

      参考

      MCU 上纯软件实现 OpenGL

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: pack 时 ERROR: unable to open file boot-resource.fex

      @chunzhang
      查询./scripts/pack_img.sh发现./tools/pack-bintools/src/fsbuild这个程序是32位的, 所以安装以下组件可解决问题:

      apt-get install lib32z1 lib32z1-dev
      
      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 苹果电脑怎么才能烧写程序

      @lanmeng 曾几何时也想用M系列芯片....但一想到要做嵌入式...

      发布在 编译和烧写问题专区
      aldfaaa
      whycan矿工-小叶
    • 回复: lvgl官方表盘项目指针和刻度没有对准,对我这种有严重强迫症的人来说看起来就心痛,不是难受,有能力的大佬修复一下这个bug?

      官方例程lv_example_meter_3.c的钟表里指针采用的是贴图方式, 所以解决思路有两个:

      1. 针对屏幕分辨率, 优化贴图文件(img_hand.c)的样式
      2. 将贴图指针换成普通线段(粗细可调), 只要比的刻度粗一丁点或者把刻度覆盖掉就舒服多了.

      贴出第二种方法变动:(基于lv_port_linux_frame_buffer.git)

      --- a/examples/widgets/meter/lv_example_meter_3.c
      +++ b/examples/widgets/meter/lv_example_meter_3.c
      @@ -32,8 +32,9 @@ void lv_example_meter_3(void)
           LV_IMG_DECLARE(img_hand)
      
           /*Add a the hands from images*/
      -    lv_meter_indicator_t * indic_min = lv_meter_add_needle_img(meter, scale_min, &img_hand, 5, 5);
      -    lv_meter_indicator_t * indic_hour = lv_meter_add_needle_img(meter, scale_min, &img_hand, 5, 5);
      +    lv_meter_indicator_t * indic_min = lv_meter_add_needle_line(meter, scale_min, 5, lv_color_black(), 5);
      +    lv_meter_indicator_t * indic_hour = lv_meter_add_needle_line(meter, scale_min, 3, lv_color_black(), 5);
      

      效果:
      3d5e542e-7738-4d83-9e75-42e0077bbc40-9051d8bca54d37bfb0faaf114e7ea2e.jpg
      结帖撒花✿✿ヽ(°▽°)ノ✿

      发布在 灌水区
      aldfaaa
      whycan矿工-小叶

    aldfaaa 发布的最新帖子

    • V853编译yolov5遇到的坑

      一开始系跟着官方教程来走: NPU 转换部署 YOLO V5 模型, 原本YOLO V3一路走下来没什么问题;
      但直到要和C++与OpenCV结合编译出yolov5就开始岔子了:
      32308b26-8eb5-4aab-8741-bc6015938d16-image.png
      然后, 尝试走韦东山的教程, 然而殊途同归走到同一个坑

      坑点

      0fb19b100a8f6685d2f666a9eb71303.png

      简要解决

      1. V853/V851s 增加 OpenCV, FFmpeg 编译包
      2. 配置好menuconfig后, 进入tina-v853-open/openwrt/package/npu/yolov5目录, 然后输入:
      mmo yolov5
      

      正常的话, make过程会下载一些包, 然后就得到了我想要的yolov5了

      发布在 V Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 大佬们,T113-S3的spinand烧录固件失败,进度0%,请问怎么去排查问题

      @wd15365693548 烧录还有USB部分线路是比较高速的, 那部分不稳定也会导致烧录失败噢

      发布在 编译和烧写问题专区
      aldfaaa
      whycan矿工-小叶
    • 回复: 使用tinyvision制作简单的网络摄像机IPCv2

      大佬太强啦!👏

      发布在 V Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 大佬们,T113-S3的spinand烧录固件失败,进度0%,请问怎么去排查问题

      @wd15365693548 那个SPI CLK的33Ω换0欧试试...

      • SPI算是连连看里的最高速线路了, 其实最好蛇形走位等长一下
      • 关键的(高速)通信线路MISO, MOSI, CLK居然做了两个过孔, 实属不应该
      发布在 编译和烧写问题专区
      aldfaaa
      whycan矿工-小叶
    • 回复: 苹果电脑怎么才能烧写程序

      @lanmeng 曾几何时也想用M系列芯片....但一想到要做嵌入式...

      发布在 编译和烧写问题专区
      aldfaaa
      whycan矿工-小叶
    • 回复: 硬核解决全志Melis系统只有LZMA解压缩的问题[工具自制]

      工具代码已开源:
      LzmaLib-aw-melis

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 硬核解决全志Melis系统只有LZMA解压缩的问题[工具自制]

      发现melis里的解压缩过程的解析压缩参数方法里跟lzma官方不一致;
      实际留了5个参数字节只用了前4个....这样会导致某些较大的压缩包解压缩错误
      线索:
      43c5e243-e5a7-4eb4-a795-90420ab63cdc-image.png
      坑点:
      dbc388b2-6bd7-4619-b05d-28b68893e7ba-image.png

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 硬核解决全志Melis系统只有LZMA解压缩的问题[工具自制]

      如题,

      • 端侧仅提供一系列(13年前纯酿的)LZMA解压缩方法:
        6661c680-ebea-4c5a-8d67-5d3a1cf5572d-image.png
        衍生的问题有:

      • 在端侧以外的缺乏工具对一些资源文件进行压缩, 无法很好地利用端侧现有解压API;

      • Melis里的一些已执行LZMA压缩的资源文件无法在端侧以外解压缩, 导致一些系统逻辑不好理解吃透.

      解决

      了解到LZMA其实系7z里用到的算法, 具体就不展开讨论; 以Melis引用的头文件作为线索, 遂在github找到分离的库源码:LzmaLib
      41b15072-b5eb-4cbf-8917-be7562b131b7-image.png
      经过数天魔改代码与验证, 实锤了上述库可用; 于是, 我把缺失的压缩打包方法以及解压方法整合成了在win下可用的工具:

      $ ./aw_lzma.exe
      aw_lzma (method) (args)
      1:convert png to yuyv. aw_lzma 1 xx.png => xx.yuyv
      2:convert png to opa. aw_lzma 2 xx.png => xx.bgd
      3:decompress bgd to fb_file_header and yuyv data.aw_lzma 3 xx.bgd => xx.bin
      4:test compress and decompress.aw_lzma 4 xx.png
      Author:YE 1004707812@qq.com
      

      建议配合rawviewer和winhex工具一起服用.
      7cc35e22-c9fd-482b-b574-1148e44c110f-image.png
      (解压出了开机画面资源图stalogo1.bin)
      工具代码整理后开源, 祝Melis开源之火不灭.

      工具

      aw_lzma_YE.zip

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶
    • 回复: 驅動程式

      https://www.aw-ol.com/downloads?cat=5

      发布在 其它全志芯片讨论区
      aldfaaa
      whycan矿工-小叶
    • 解决D1s烧录时遇上ZQ校准错误(240欧已接好)

      问题描述

      在sys_config.fex正确配置uart_debug的前提下, 烧录时, 调试串口报ZQ校准错误:
      b59e2366-0660-47b7-a01c-25d364ccdd89-image.png

      • 已确认硬件ZQ脚接入240Ω电阻;
      • 排除了sdk软件层面的问题;

      解决方案

      进一步检查DDR的供电发现:贴片的5819二极管反接了, 没有出发DRC(有可能是器件本身就错的), 导致片上内存LDO供电异常.
      62bf66f9-c3df-4e66-899d-03e16f212872-1f081ed3827883e3a98497d3cd80f00.png

      发布在 MR Series
      aldfaaa
      whycan矿工-小叶