导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. Tristan_C
    T
    • 资料
    • 关注 0
    • 粉丝 0
    • 我的积分 848
    • 主题 10
    • 帖子 15
    • 最佳 5
    • 群组 0

    Tristan_CLV 4

    @Tristan_C

    848
    积分
    27
    声望
    17
    资料浏览
    15
    帖子
    0
    粉丝
    0
    关注
    注册时间 最后登录

    Tristan_C 取消关注 关注

    Tristan_C 发布的最佳帖子

    • 回复: 【水经验混下载权限专用贴】如何升级LV2拉取SDK

      @hctdqz 我也是苦于lv2啊

      发布在 灌水区
      T
      Tristan_C
    • 【飞凌 OK113i-C 全志T113-i开发板】3.开发环境准备和搭建

      3.开发环境准备和搭建

      这次就来准备搭建一下T113i的开发环境,其实对于初入门的Linux开发者而言,开发环境的搭建真的也是一大课题,有时候甚至要耗费相当多的时间搭建环境,配置环境,配置工具等等。因此这部分是否能方便快捷,至少能顺利搭建也成了一大关键。而我也算是作为初入门的Linux开发者,本次也难免要经历这个过程。
      Linux的开发环境一般使用Linux机器进行开发编译等工作,这个Linux机器可以是实体机,也可以是虚拟机,飞凌官方已经将虚拟机和整个开发环境,包括需要用到的一些工具等都打包起来了,很方便。但现在Windows已经支持WSL,之前熟悉其它Linux芯片开发的时候也尝试过,也是非常方便,不用额外再增加安装虚拟机了,因此这次也打算尝试一下。本机已经安装了如下的Ubuntu-20.04版本
      37d526bd-2011-45de-bf6e-75d71a3a19c8-image.png
      下面先登录该WSL,然后在Home文件夹下新建forlinx文件夹
      a0303d21-06d7-4de4-b8cb-93ff5ea8f986-image.png

      然后将源码拷贝如该文件夹
      2147e26e-89bb-4896-ab2f-01545a1b21b6-image.png

      此后进行MD5校验,并于上述文件夹中的sdk_md5sum.txt原始MD5进行对比
      b19bb197-9212-4ff4-88ac-22f90d442580-image.png

      没问题就可以进行解压了
      03366e3f-f9d9-4a3d-b051-398664e9b733-image.png

      解压完成
      32e318f2-f107-40ee-91e8-d7dab6e6a3c9-image.png

      解压完成可以看到如下文件信息
      e9ca39d8-faa4-4843-8169-67a41b4f118b-image.png

      进行sdk配置
      2b47c17a-ca48-4ae4-b8aa-cb5302c0b2c0-image.png

      开始内核全编译
      db88dda8-77fc-44e1-96fe-64953b78abc3-image.png

      提示了这个错误
      5fafd9a8-5986-4c52-a590-f6365c9cdec5-image.png

      这个可能是包没有安装好
      b86db137-af3c-4385-9d97-adc4c4a124a2-image.png

      还是不行,按照提示安装另一个
      77c80584-1a60-43da-89c1-4b41ac30ccd1-image.png

      然后接着编译
      7f699506-3109-4e56-a62f-c5320eed54e3-image.png

      然后开始打包
      b58ffd5c-f346-419e-8cb8-e9f59b8fb750-image.png

      提示最终打包成功,并在out文件中生成img镜像文件
      afa660af-b604-4cbc-8d57-aae14be49f78-image.png

      从宿主机的文件资源管理器中也能看到最新生成的镜像文件
      b578d18e-52ab-4c1d-ba9d-c483b20f6e7f-image.png

      由此编译打包成功。

      还可以尝试编译一下内核
      a8544ce9-cd60-41b0-b2aa-8ad9175d24a5-image.png
      这里也能看到其编译使用的工具链情况
      toolchain_archivedir=/home/forlinx/OK113i-linux-sdk/build/toolchain/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi.tar.xz

      40489edf-e9ed-4d36-b8c9-f4cf42cb8919-image.png

      96177236-31e8-4608-af03-78749f0c4b3e-image.png
      编译成功
      1b874a34-7fdb-47aa-8917-5b8e6b10c0b1-image.png

      编译完会在/home/forlinx/OK113i-linux-sdk/out/t113_i/OK113i/longan/路径下生成 boot.img
      943fddf7-c859-4352-b026-1f427b69b620-image.png

      boot.img 可用于在线单独更新内核,用户需将其从虚拟机中拷贝到 OK113i 板卡/home 路径下,之后执行:dd if=/home/boot.img of=/dev/mmcblk0p4 conv=fsync
      完成之后,重启板卡,即替换内核
      注意单独编译内核只针对内核源码进行编译,影响驱动,适用于仅修改内核时进行编译

      执行./build.sh clean可以清除所有中间文件。但不影响源文件,包括已经有改动的源文件。
      38c61b5d-df2a-408e-b3c4-71ee8f912d1f-image.png

      总结:看起来sdk在解包出来之后,整个编译的过程还是非常的顺利的,这个也得益于sdk的设计和打包。

      发布在 飞凌嵌入式专区
      T
      Tristan_C
    • 【XR806开发板试用】+ 开箱及环境搭建

      开箱及开发环境准备

      一、开箱
      很感谢极术和全志给与评测的机会,对于初学者来讲能有机会体验也是很幸运。收到第一时间开箱,实物如下。

      1292e5e0-31ed-4195-803d-ff6dd4a37258-image.png

      ae40f155-4a2f-40f9-86c1-bb612ea76f0e-image.png

      评估版采用成品模块+测试底板的方式,其中,模块采用XR806AF2L,采用QFN32封装芯片,使用PCB天线,做成模块也非常适合直接商用。模块板载一颗高频40MHz晶振,未使用32KHz低频晶振,应该是使用了内部的RC。模块上的器件比绍,集成度还是非常高的,模块体积尺寸看起来还可以做得更小。
      0f750a36-bcdc-4c5d-b292-82323f68eeb4-image.png
      062efccb-6d95-4cc1-956c-9aab35b807f5-image.png
      底板则除了XR806之外,包含供电系统,并增加了USB接口,接了一片CP2102做USB转串口。外接两颗按钮和一颗LED,并将空闲管脚引出
      4f7bee9a-4822-4aec-9d85-82bf3fe87432-image.png
      26d6eb18-1ba3-4965-b98d-c004aa85d8d0-image.png
      8e6c3855-4ddf-40f7-a9a0-53876d4723c5-image.png
      024e72c4-d8dc-49fb-98e0-e5b546cd942e-image.png

      作为评估版,基本功能已经够用。

      下面看下主芯片XR806
      这是21变全志发布的芯片,是一款基于安谋科技的STAR-MC1处理器来研发设计的支持WiFi和BLE的高集成度无线MCU,目前已经支持鸿蒙系统和Free RTOS系统。
      下图为其芯片内部框图
      芯片最高主频可达160MHz,内置SIP 288KB SRAM,SIP 160KB Code ROM,以及2MB的XIP Flash
      8a3ccfd3-79a2-4511-bdc8-4ecfb06680f1-image.png
      be5c4b97-a630-48b1-82ad-30f66a70017a-image.png

      二、开发环境准备
      下面来准备一下开发环境
      产品目前支持Linux环境开发,因此我也选择改方式,当然也是我第一次尝试Linux环境的arm开发。工具采用如下组合:
      Win11 + WSL2 + gcc-arm+VSC
      其中win11和WSL2的安装不做记录了,按照win11的操作在应用商店即可。下面记录gcc-arm和xr806的sdk安装。注意:以下操作有可能需要sudo权限,记录中不一定完全体现
      1.源码sdk
      下载和解压安装,使用如下命令下载:
      wget https://bbs.aw-ol.com/assets/uploads/files/1693988430633-xr806_sdk.tar.gz
      然后解压:
      tar xvf 1693988430633-xr806_sdk.tar.gz
      2.gcc-arm
      下载gcc-arm工具链
      wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/8-2019q3/RC1.1/gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
      同样是压缩文件需要解压,可以把压缩包放置到用户文件下的tools
      90dbbc46-8144-4829-b7c9-246a6cda31cf-image.png

      tar xvf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2 -C ~/tools/
      如果没有tools,可能得创建mkdir一下
      3.更改gcc.mk中的gcc-arm的路径
      代码编译前需要在“gcc.mk”中设置正确的GCC 交叉编译工具链路径,进入sdk安装路径
      860ac1b1-30ac-4661-9768-246ec39d83cc-image.png
      并使用vim打开gcc.mk,然后将CC_DIR更改为如下路径
      813e3002-1cad-4e55-8311-78e3e2cf3879-image.png

      4.应用开发示例
      接下来就可以使用代码编译和镜像创建了,以 hello_demo 工程为例

      复制默认配置文件到顶层目录(不切换工程可不要此步骤)

      $ cp project/demo/hello_demo/gcc/defconfig .config

      检查SDK 基础配置,如工程名、芯片型号、高频晶振、板级配置是否正确

      $ make menuconfig
      28728e4f-c49b-40ca-bb55-5c2c70bc5c18-image.png

      清理,切换工程时需要

      $ make build_clean
      cbcfcb61-ca75-498e-9d41-b338254babc4-image.png

      编译代码并生成镜像文件,生成的镜像文件为“out/xr_system.img”

      $ make build(建议使用make build -j 加速编译),编译通过如下
      bc868cd5-2ba1-4407-abf5-19f9ac478b1f-image.png

      在sdk安装文件夹下,有一个out文件夹,生成的镜像目标文件就在此处,可以查看生成的相关文件。
      1c43b858-62db-4989-932b-f0157abc3055-image.png

      然后我们就可以进行程序烧写,将开发板通过USB接到PC,并打开phoenixMC.exe,找到对应的镜像文件,并选择正确的端口号,点击右上角的升级固件即可开始下载。
      77c2757d-1492-4299-b032-4756bf411cbc-image.png

      下载成功之后,在PC端打开串口调试助手,选择正确的COM号和波特率,即可看到hello word例程打印的如下信息了。

      74641c9e-8eb7-4cb4-91bb-c9522a1aa61c-image.png

      需要注意的是,如果在下载的过程中提示如下错误
      dcbd11ce-bd24-46de-bde6-eade14090f5f-image.png

      ebdc91f5-5619-45cb-a370-567451a849e7-image.png

      可以通过重新安装CP2102的最新版本驱动,连接如下:
      https://www.silabs.com/documents/public/software/CP210x_Universal_Windows_Driver.zip

      下面来增加VSC的支持
      VSC的按爪个不赘述了,按照安装
      然后在扩展插件中搜索WSL,并安装
      57e866aa-3482-45dd-816a-752630255f8e-image.png

      安装完成就可以点击左下角
      99740167-2839-47fb-b8f7-7c64ee5b3177-image.png

      或者Ctrl+Shift+p
      5eab5fc5-6717-46cd-86ed-bb6e58dbc8e6-image.png

      点击连接到WSL了
      然后在终端中,cd进入到sdk所在路径
      47290d7a-22c8-4d0b-8292-dcbc3b3d6e96-image.png

      输入code . 即可打开sdk文件夹了
      41b4587c-bd88-4957-99a8-f41d340c21c6-image.png

      至此环境搭建完成。

      发布在 Wireless & Analog Series
      T
      Tristan_C
    • 【XR806开发板试用】+ 通过网络控制led并上报按键状态

      通过网络控制led并上报按键状态

      本次做一个手机通过mqtt服务器控制板子上的LED亮灭,板子也可以将按钮状态变化通过mqtt服务器上报给手机的功能
      硬件上,从原理图看,LED接到了PA21,高电平点亮。
      f8d503a6-686e-4602-a189-3496ecc6bfc1-image.png
      按键则时接到了PA11,并接了一个上拉电阻。
      f2487c6b-be8f-4acb-a54d-7613947bed84-image.png

      因此,设计上就可以通过按键上升沿中断,作为按键按下一次的事件,然后本地取反一次LED灯,并publish灯的状态给手机端,同时,会subscribe订阅灯的状态,接收手机端publish过来的LED控制数据。而手机端则可以publish控制数据,其中0作为关灯,发送1作为开灯,同时也subscribe订阅板子publish上来的LED状态数据。
      Mqtt的服务器使用自行搭建的emqx broker
      da08c02b-0346-47b8-9a19-3c32880519a1-image.png

      下面就开始整代码。首先拷贝mqtt demo代码默认配置
      cp project/demo/hello_demo/gcc/defconfig .config
      然后先make build_clean将之前的代码清掉
      然后使用vim打开mqtt的main.c代码

      先定义LED和key的io引脚
      5245cc42-30f4-42a9-a174-005e85c54a38-image.png

      再进行引脚的初始化,初始化中进行了LED亮灭2次闪烁,表示初始化成功。定义按键引脚为上升沿中断,中断中取反LED的亮灭状态,并更新led_state的值。
      abce267f-2a73-4e65-ba27-0a8b33c239a5-image.png

      然后在main函数中调用初始化。
      55d0793c-993c-44f1-b193-18f16f6aacaa-image.png

      下面进行mqtt服务器相关参数的配置,如下,这里定义了两个topic,分别是MQTT_DEMO_TOPIC和MQTT_DEMO_PUB_TOPIC,前者订阅LED的状态,以控制LED的亮灭,后者则可上报按钮状态。HOST_NAME为mqtt服务器主机的ip地址或者域名

      68186bbf-995e-43a6-8da1-2994a8aeae5f-image.png

      初始化 mqtt
      08b2d8bc-f84b-449e-adfd-beb85a8ffce9-image.png

      Mqtt连接
      49eed009-e8e7-4648-a9bd-1dbef1e45b9a-image.png

      订阅以及订阅的消息回调,其中在消息回调中,判断接收到的消息是字符0还是字符1,并进行响应的LED亮灭操作。

      发布则是进行对应主题的发布操作
      aaa6e02a-7fef-4022-a640-0b9cb60189f7-image.png

      接下去就是mqtt主处理功能函数,其中主要是维持mqtt连接,并根据本地的按键控制的LED状态是否改变,决定是否publish上报改状态
      7cfee316-0457-4f83-9336-b8bcd398205a-image.png

      最后就是主函数初始化硬件、功能和网络,并启动mqtt主进程了。

      编译,下载运行
      2f317d2d-6516-4540-a256-5a94ec8aec26-image.png

      使用mobaxterm打开端口终端,可以看到如下打印信息
      ee303a86-845c-4d2e-8f82-e2e06f344a5f-image.png

      Wlan的wifi ssid和password是通过命令行command line的方式进行配置的
      3a22b0ae-56eb-40fa-b4cd-d5a1522f2118-image.png

      6b4939c6-97b0-4385-af3e-5721a913bba3-image.png

      我们需要使用的主要是上面的三条,分别是
      配置ssid:net ap set ssid ssid_example
      配置password:net ap set psk psk_example
      使能启动连接:net ap enable
      连接wifi并成功连接mqtt服务器
      afce1e47-d3d8-4adb-8d1c-0236f5493a6b-image.png

      此时mqtt broker服务器上也就能看到开发板设备连接上了
      4355e358-fdb3-4834-859d-1ac264e10300-image.png

      打开手机的MQTTool工具app(iPhone)
      点击connect
      e54a4924-2ac3-4025-9daa-47681778bff4-image.png

      就可以在emqx上看到对应的手机设备连接了
      88c869f7-3f05-4e31-9c7a-410120176728-image.png

      App切换到subscribe选项卡,输入 KEY/STATE 订阅主题,并点击Subscribe订阅该主题
      d8008a53-f707-41fe-91bf-3ba14f0c9cfb-image.png

      轻按开发板上的按钮,可以看到板载的LED亮灭切换

      99c08f60-4d6b-45ef-8f3a-68f807233ada-image.png
      e8acb4c9-dcc8-48bb-8051-24b5fe2690a6-image.png

      同时串口终端中输出对应的信息
      51f78850-0f49-425a-8489-f953aa00f6e2-image.png

      而在手机端的app上,切换到subscr选项卡,就可以看到每按一次按键,开发板publish发不上来的消息了
      c0ebc3da-e265-41cf-8033-7ea0031e8506-image.png

      再切换到Publish选项卡,输入 LED/STATE 内容作为publish发布的主题
      此时在Message框中输入1,并点击publish,就可以看到灯亮起
      33c1d4a0-1e42-4fcd-89ff-dce5a6c59613-image.png
      796436a9-f84a-4d97-9000-b48f022a867f-image.png

      而输入0并点击publish发布,则看到灯灭
      598a96d5-643f-4c14-8e08-f8634dde7ab2-image.png

      1520055a-594e-4095-8282-487227d67cd7-image.png

      同时,开发板在收到上述的两次publish主题消息之后,还会在串口终端上打印如下内容。
      b700fb68-a653-482d-b5b3-caba3e2e728d-image.png

      在emqx上可以看到完整的主题
      6aa49719-40f3-491d-9d1f-05ac189b0512-image.png

      以及订阅方了
      966ef631-0b1d-4192-ade7-f2262b4e03f6-image.png

      至此,小制作实现了LED和按钮的功能,并通过mqtt,实现手机与板子之间的状态上报和控制信息下行。

      发布在 Wireless & Analog Series
      T
      Tristan_C

    Tristan_C 发布的最新帖子

    • 【飞凌 OK113i-C 全志T113-i开发板】5.GPIO的控制

      我的第一个控制:LED点亮

      前面搭建完了开发环境了,下面可以尝试别的简单方法,跑一下板载的外部资源,控制一个LED亮灭(通常称电灯实验)是一个比较常见的板载资源测试功能之一。下面来尝试一下控制板子上的下面这颗用户的LED灯。
      从图中可以看出,D1这颗LED灯接在了PG11引脚上,通过R1电阻接到VCC电源进行限流,并使用CQA34N00这颗N沟道MOS管进行控制,而控制引脚PG11接了2K的电阻进行上拉。给出厂的板子上电,这颗LED保持常亮。
      aebc1ac9-182a-4aa0-846e-e33a81af21c5-image.png

      下面通过文件操作的方法控制一下这个LED灯
      首先进行一下引脚编号的计算。
      根据 #define PIN_NO(port, line) (((port) - 'A') * 0x20 + (line))进行计算
      其中 port 为 gpio 端口,line 为该 gpio 对应引脚,((port)-'A')代表 ASCII 码相减。
      如这颗LED的引脚 PG11对应的 pin 引脚编号为IN_NO('G',11)=(0x47-0x41)*0x20+11=(71-65)*32+11=107。
      也就是说,这颗LED的引脚实际使用编号就为203.
      然后登录一下板子的系统,通过如下命令查看文件GPIO,同时也进入到GPIO文件夹中,方便后续测试操作。
      a82a4692-7353-4ed7-a2d2-1bd306179218-image.png

      可以看到已经有了export和unexport

      接下去使用
      Echo 203 > /sys/class/gpio/export
      进行引脚导出命令,就能看到多出了gpio203文件夹
      f7175940-307e-4955-baf3-40e2357ff944-image.png

      进入gpio203文件夹,看看内含文件
      82776055-f2f4-4841-b5d8-5a1460046a42-image.png

      其中,direction为gpio的输入输出方向配置,value则为输入输出的值了。可以配置前者为输出,后者为1和0分别控制led的亮和灭了。
      使用
      echo "out" > /sys/class/gpio/gpio203/direction
      将引脚的方向设置为输出,并使用
      cat /sys/class/gpio/gpio203/direction
      查看上面的设置输出是否成功正确。
      4235f70c-8d4a-4d6a-b11c-33cad2df756d-image.png

      这时候板载的这颗LED状态就熄灭了,因为默认的value值从哪读取来看应该为0
      4ea4948f-4c52-434f-8e45-1422d2424041-image.png

      接下去就可以通过写value文件的内容为1和0,分别控制LED灯的亮和灭了。
      a8ca9411-b2e3-42b7-a4d8-d95c46c15ac3-image.png

      设备树那边也定义了一个T113-i核心板上的板载LED,这颗LED默认也就是作为Linux核心板的“心跳”功能使用的。

      在sys/class下面
      e712802a-eaff-4281-8e7a-2918412cd2a0-image.png

      可以发现有一个heartbeat的文件夹,并可以发现其里面的如下的文件
      438bef04-4d7f-429a-9574-4ac965dc6892-image.png

      其中控制brightness文件内容即可控制这颗LED的亮灭状态了,也就是写1和0分别就可以控制其亮和灭的状态。
      86e3f6a3-2463-47de-84b5-edee30db6ac2-image.png

      852b2dd5-a61a-4489-9e0d-a39be7d73add-image.png

      还可以从板子设备树的具体文件夹具体文件中的leds中找到对应的引脚定义,可以暗道使用引脚就是PG16,GPIO_ACTIVE_HIGH指定了其点亮的电平为高电平。
      81e5d5a5-4085-40a1-8a0b-ccababe1d960-image.png

      以上就是通过设备树中的gpio和leds来控制核心板和底板上的led的亮灭状态功能了。

      6a4a6314-7925-4a64-8448-d15f8ab0d7c5-image.png

      e1fc5155-31f8-4392-a6ff-e269fef62845-image.png

      7f8f7cba-a22a-4995-9fa3-824b72177b15-image.png

      确认可执行文件的权限并更新
      4b31a9a1-1024-4734-a472-87f57c087198-image.png

      然后通过sftp,传给开发板的home/my_test路径下,并通过ls命令确认

      f58d52ad-2c2d-40ed-b248-6bfd6c6cc30c-image.png

      执行,输入对应的引脚编号就可以看到翻转三次了
      773f3203-ae0c-461a-bd6b-4fc186fef7e9-image.png

      其主要实现代码为
      输入引脚编号
      0913069c-c1f5-4a45-9046-afac2b498d80-image.png

      Export引脚到文件
      01c1683e-9b83-4f89-aef8-5102e57ce706-image.png

      设置方向为out
      c1aefabf-5ab8-4797-9043-a5b3d7388780-image.png

      翻转三次
      d4766b6f-788b-4adb-ace4-2dce5c1b6cde-image.png

      最后还需要unexport
      c964c36e-a517-425f-961f-64018007a500-image.png

      发布在 飞凌嵌入式专区
      T
      Tristan_C
    • 【飞凌 OK113i-C 全志T113-i开发板】4.WiFi和以太网络的使用

      WiFi和以太网络的使用

      飞凌这块t113-t开发板,板载了一块WiFi+蓝牙的模块,以及千兆一台网络,出厂已经支持了WiFi驱动,且在之前的实验中已经打开了wifi模块的功能,并手动扫描链接了AP热点,这次我们就来通过配置文件的方式,让开发板上电自动链接指定的AP热点,这样就不用每次还要使用串口进行登录了。
      确认wpa_supplicant的支持
      604ba53f-dd31-45d0-8a40-ec83adcb7e98-image.png

      开启
      7e0bf044-9c74-4d8b-bdeb-4a6cfa4c45f2-image.png

      配置wifi
      2c72f85c-2773-4182-96a2-387a763bd402-image.png

      更改配置
      d77f50e2-5564-40ee-900c-a2bed652b66d-image.png

      保存之后确认配置
      d23139ae-65b0-4496-9a01-87e8b2c2f0d8-image.png

      udhcpc -i wlan0启动链接,之后ping一下路由器,说明网络链接通了
      25b5ee46-08a1-4acb-bb88-19187f19bd33-image.png

      另外,板子上面配置了一个千兆的 一台网口,通过ifconfig可以找到其设备为eth0。
      1fa08bce-4aa8-4e36-b1e6-c4462e7ec040-image.png

      使用vim打开下面的文件,更改箭头所指的ip和网关地址为路由器地址。
      28d7c506-7b43-4083-a743-b1dce12b7b1d-image.png

      改成如下值
      f1fb7126-e9eb-492f-b135-a42f90b1abe1-image.png

      通过cat文件内容确认
      b0441b37-b295-456b-bbda-dda8861011f3-image.png

      执行 ip addr flush dev eth0,然后ifdown -a和ifup -a指令重新启停配置,配置文件才能生效。
      e4cf5738-7ec9-4713-88b9-3c75d04d4386-image.png

      Ifconfig确认ip配置
      13f7bcae-b357-468d-a54f-4b7f89eb779c-image.png

      然后就可以成功ping路由器
      6286f007-9af5-4b20-be9d-bdc94c863ff1-image.png

      在路由器上面也能看到该设备的信息
      6f9d05c3-e051-476c-a2df-d215f1b42051-image.png

      这时候使用Mobaxterm就可以链接上开发板
      2d70c9f3-cdb5-499f-98f7-4d23190c1f1d-image.png

      默认登录名为root
      30009884-f9cd-4b08-94ab-d8c6631930c7-image.png

      另外,还可以使用sftp服务,而Mobaxterm已经集成了该服务工具,传输文件非常方便
      21cb1b95-1713-4436-8626-a933a1c3930f-image.png
      OK113i-S 开发板预装了 lighttpdweb 服务器,并且系统启动时已经自动启动了 lighttpd 服务,在浏览器中输入开发板的 IP 地址即可浏览开发板 webserver 中的网页

      25d91a28-ae49-4095-9c6f-bf569bac9647-image.png

      发布在 飞凌嵌入式专区
      T
      Tristan_C
    • 回复: OK113i-S开发板-4视频编解码测试

      @bsplayer 好赞

      发布在 飞凌嵌入式专区
      T
      Tristan_C
    • 回复: OK113i-S开发板体验-1开箱和基本使用

      @bsplayer 好赞

      发布在 飞凌嵌入式专区
      T
      Tristan_C
    • 【飞凌 OK113i-C 全志T113-i开发板】3.开发环境准备和搭建

      3.开发环境准备和搭建

      这次就来准备搭建一下T113i的开发环境,其实对于初入门的Linux开发者而言,开发环境的搭建真的也是一大课题,有时候甚至要耗费相当多的时间搭建环境,配置环境,配置工具等等。因此这部分是否能方便快捷,至少能顺利搭建也成了一大关键。而我也算是作为初入门的Linux开发者,本次也难免要经历这个过程。
      Linux的开发环境一般使用Linux机器进行开发编译等工作,这个Linux机器可以是实体机,也可以是虚拟机,飞凌官方已经将虚拟机和整个开发环境,包括需要用到的一些工具等都打包起来了,很方便。但现在Windows已经支持WSL,之前熟悉其它Linux芯片开发的时候也尝试过,也是非常方便,不用额外再增加安装虚拟机了,因此这次也打算尝试一下。本机已经安装了如下的Ubuntu-20.04版本
      37d526bd-2011-45de-bf6e-75d71a3a19c8-image.png
      下面先登录该WSL,然后在Home文件夹下新建forlinx文件夹
      a0303d21-06d7-4de4-b8cb-93ff5ea8f986-image.png

      然后将源码拷贝如该文件夹
      2147e26e-89bb-4896-ab2f-01545a1b21b6-image.png

      此后进行MD5校验,并于上述文件夹中的sdk_md5sum.txt原始MD5进行对比
      b19bb197-9212-4ff4-88ac-22f90d442580-image.png

      没问题就可以进行解压了
      03366e3f-f9d9-4a3d-b051-398664e9b733-image.png

      解压完成
      32e318f2-f107-40ee-91e8-d7dab6e6a3c9-image.png

      解压完成可以看到如下文件信息
      e9ca39d8-faa4-4843-8169-67a41b4f118b-image.png

      进行sdk配置
      2b47c17a-ca48-4ae4-b8aa-cb5302c0b2c0-image.png

      开始内核全编译
      db88dda8-77fc-44e1-96fe-64953b78abc3-image.png

      提示了这个错误
      5fafd9a8-5986-4c52-a590-f6365c9cdec5-image.png

      这个可能是包没有安装好
      b86db137-af3c-4385-9d97-adc4c4a124a2-image.png

      还是不行,按照提示安装另一个
      77c80584-1a60-43da-89c1-4b41ac30ccd1-image.png

      然后接着编译
      7f699506-3109-4e56-a62f-c5320eed54e3-image.png

      然后开始打包
      b58ffd5c-f346-419e-8cb8-e9f59b8fb750-image.png

      提示最终打包成功,并在out文件中生成img镜像文件
      afa660af-b604-4cbc-8d57-aae14be49f78-image.png

      从宿主机的文件资源管理器中也能看到最新生成的镜像文件
      b578d18e-52ab-4c1d-ba9d-c483b20f6e7f-image.png

      由此编译打包成功。

      还可以尝试编译一下内核
      a8544ce9-cd60-41b0-b2aa-8ad9175d24a5-image.png
      这里也能看到其编译使用的工具链情况
      toolchain_archivedir=/home/forlinx/OK113i-linux-sdk/build/toolchain/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi.tar.xz

      40489edf-e9ed-4d36-b8c9-f4cf42cb8919-image.png

      96177236-31e8-4608-af03-78749f0c4b3e-image.png
      编译成功
      1b874a34-7fdb-47aa-8917-5b8e6b10c0b1-image.png

      编译完会在/home/forlinx/OK113i-linux-sdk/out/t113_i/OK113i/longan/路径下生成 boot.img
      943fddf7-c859-4352-b026-1f427b69b620-image.png

      boot.img 可用于在线单独更新内核,用户需将其从虚拟机中拷贝到 OK113i 板卡/home 路径下,之后执行:dd if=/home/boot.img of=/dev/mmcblk0p4 conv=fsync
      完成之后,重启板卡,即替换内核
      注意单独编译内核只针对内核源码进行编译,影响驱动,适用于仅修改内核时进行编译

      执行./build.sh clean可以清除所有中间文件。但不影响源文件,包括已经有改动的源文件。
      38c61b5d-df2a-408e-b3c4-71ee8f912d1f-image.png

      总结:看起来sdk在解包出来之后,整个编译的过程还是非常的顺利的,这个也得益于sdk的设计和打包。

      发布在 飞凌嵌入式专区
      T
      Tristan_C
    • 【飞凌 OK113i-C 全志T113-i开发板】2.一些有用的常用的命令测试

      一些有用的常用的命令测试

      一、系统信息查询
      可以查询板子的内核信息、CPU处理器信息、环境变量等
      acba5a3e-14c7-4570-8cbe-5c7b0646c622-image.png
      二、CPU频率
      从上面的系统信息查询到,这是一颗具有两个ARMv7结构A7内核的处理器,主频最高1.2GHz
      可以通过命令查看当前支持的频率以及目前所使用主频
      34cfd390-069a-4cac-a268-397fba77c6af-image.png
      还可以通过命令更改所使用的频率
      三、内部温度的测试
      这个测试主要是针对芯片内部的温度传感器,一般可以用于芯片内部的一些温度监控等。输入命令之后,可以看到,当前室温下,芯片温度达到了30度左右。
      be8f52c8-7eee-4037-a951-a0fd882fc7c6-image.png
      四、执行DDR的带宽测试
      53e72d3b-8cf2-4dd4-bc24-cc2ceeb59b90-image.png

      五、板载RTC测试
      开发板上带了一颗RTC芯片,PCF8563,I2C接口,并带有一颗备用电池,给RTC芯片用,掉电时可以保持时间走时,开发板在发货时已经附送了一颗CR2032纽扣电池
      fba180cd-037a-40bc-9fdb-46781ff1a1c5-image.png
      可以通过如下指令读取当前RTC的时间
      77ad8084-fd5a-4cc2-9742-2e86046a8266-image.png

      通过date -s命令设置时间,并使用hwclock -u -w将时间同步给RTC芯片
      166695c4-9675-4aa9-b555-09b3c70dbe88-image.png
      然后再通过hwclock -u -r可以看到时间已经在更新走时,若断电再重新上电也是最新的时间了。
      15d79bf7-25d7-43e8-bb05-c6d25552f912-image.png

      六、按键测试
      底板上有 8 个按键,其中侧边有 5 个按键
      68a972b6-4b5a-40e0-9df0-f1e855174bed-image.png
      VOL+、VOL-、MENU、ENTER、HOME 的测试,键码
      分别为 115、114、139、28、172,分别对应 PCB 丝印 K3、K4、K5、K6、K7;另外,丝印 K1 对应一个用户按键,键码为 148。K2 为 reset 按键,K3 为 FEL 按键,用于烧录程序
      可以使用fltest_keytest进行板载按键的测试,按键的按下和释放
      23d7db65-3d23-4654-855d-a384ba94ba2f-image.png

      七、核心板载LED控制
      核心板上有一颗LED接到了T113i的GPIO上
      e69fc498-f35b-41ce-a06a-0e1da50f8b92-image.png
      可以通过命令方式进行控制
      首先可以使用cat /sys/class/leds/heartbeat/trigger查看当前的出发方式,可以看到出厂默认的是heart心跳出发的方式,也就是利用时钟进行一定 频率的闪烁
      7f33a17d-2f37-4442-9e71-4a0d37967ee2-image.png
      通过
      echo none > /sys/class/leds/heartbeat/trigger
      可以将其停止心跳模式,然后通过
      echo 1 > /sys/class/leds/heartbeat/brightness
      和
      echo 0 > /sys/class/leds/heartbeat/brightness
      分别手动控制其亮和灭了。也就是向文件写入1亮起,写入0熄灭,或者写入下面的heart则进入心跳模式。
      再用echo heartbeat > /sys/class/leds/heartbeat/trigger又可以恢复心跳状态。
      e8d5c278-f781-42b3-9e6a-a33b5deb88de-image.png

      这次主要是利用官方的文档,使用命令行的方式,进行板载的一些资源和常用命令的测试,作为一个放入们的使用者而言,通过这个方式来熟悉硬件,熟悉系统,熟悉开发的资源还是有非常大的帮助的,飞凌也在开发板的资料中,提供了飞航丰富的相关测试命令,结合丰富的板载资源,可以很方便进行熟悉测试和使用。测试没有完全做完,后面将搭建具体的开发环境,并使用代码测试相关的功能。

      发布在 飞凌嵌入式专区
      T
      Tristan_C
    • 【飞凌 OK113i-C 全志T113-i开发板】1.开箱

      【飞凌 OK113i-C 全志T113-i开发板】1.开箱

      首先还是真心感谢飞凌嵌入式,能给予这次测评的机会,作为一个Linux涉足未深的入门者来说,申请通过的时候还是非常惊喜,因为从开始申请就在期待。说起来收到有些天了,但一直忙于工作,没来得及拿起这块板子,今天得空拿出来开始用了。说实话,一眼看到包装,没看到现在各种开发板华丽的外壳,但却感受到沉甸甸的分量,给我的感觉是,这个体积,这个分量它总不会差!
      f9e7d465-a3a1-446d-8382-3e6a30b0a352-image.png

      b48528a0-bbb7-42bb-9d8d-5d83d27abd92-image.png

      打开之后
      6d8304fd-7d33-496a-afe0-888d66fae1d9-image.png

      拆开静电袋包装,板子的真面目终于见到了。板子的做工还是非常好,接口可以说很丰富了,布局也相对合理。
      f638d05b-3035-4d10-b26e-a12392f64c0f-image.png

      可以看得出来,这块开发板的设计还是非常用心的,采用核心板+底板的结构形式,基于全志T113-i处理器设计开发,处理器为ARM Cortex-A7, RISCV, HiFi4 DSP多核异构架构,主频1.2GHz,核心板有两种规格,分别是512MB DDR3L内存加8GB eMMC版本和256MB DDR3L内存加256MB SPI Nand版本,这次使用的是后者。OK113i-S开发板将核心板的功能接口资源丰富、提供多种外设接口,如网卡、CPU内置音频Codec、ADC、TF Card、LVDS、RGB、WIFI、4G等功能接口,非常丰富。非常适合嵌入式Linux的控制类,音视频类、网关等应用。
      2336f08a-47f6-4363-8abf-5cb4ddd7db62-image.png

      其实最令我欣喜的是板子上面直接预留了USB转串口的电路,这样只需要标准的USB线就可以使用串口连接,而省去翻找带USB转串口功能的模块的麻烦,这点要大大点赞。
      8ace6770-5c59-4f80-9fbd-ea83a78a07f7-image.png
      而作为开发板,飞凌官方则提供了相当丰富的资源,包括网卡驱动、LCD、4G网络、USB摄像头、SD卡,以及常用的UART、SPI、PWM等等外设。
      cee43d81-a34d-499b-b787-5edb270f9500-image.png
      尝试使用电源给板子上电之后,各指示灯陆续亮起
      94d46b69-558f-47a4-90cc-96b22b875fa8-image.png

      使用Type-C线连接电脑和开发板之后,就可以在电脑的设备管理器中看到对应设备的端口了。
      6bfb52c5-cd68-4dd5-a139-f40ba6f456da-image.png

      此时打开mobaxterm,新建session,选择Serial方式
      ce1624fe-e531-4fca-9dbe-239c317247d2-image.png

      指定前面设备管理器中发现的串口号,并选择串口配置如下
      串口设置:波特率 115200、数据位 8、停止位 1、无校验位、无流控制。
      4cdb1917-eb70-4218-a283-5d5606bdc637-image.png

      点击ok创建连接,登录时,串口终端登陆为 root 用户,无密码。
      输入ls和ls -l,即可看到如下信息了
      57081757-a7e3-4ad1-835b-960e5e3f584d-image.png

      接下来还可以使用CoreMark 测试A7内核的性能。首先可以使用
      echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
      指定T113i为高性能模式,然后使用coremark命令开始测试,最后输出如下
      33b585f6-191b-4e47-97a2-73dce047fcc9-image.png

      这样板子就开始跑通了。接下去就可以好好体验一把具体的开发。

      发布在 飞凌嵌入式专区
      T
      Tristan_C
    • 有没有大神帮忙看看xr806的http的get接口获取数较大的适合会容易出现下面问题

      有没有大神帮忙看看,附件的代码,在执行之后,会出现获取的内容后半段是乱码的情况
      试用xr806芯片,开发板,采用example里面的httpc例程,适当修改如下,主要功能就是通过天气接口,获取天气json数据,然后调用cjson接口解析

      /*
       * Copyright (C) 2017 XRADIO TECHNOLOGY CO., LTD. All rights reserved.
       *
       *  Redistribution and use in source and binary forms, with or without
       *  modification, are permitted provided that the following conditions
       *  are met:
       *    1. Redistributions of source code must retain the above copyright
       *       notice, this list of conditions and the following disclaimer.
       *    2. Redistributions in binary form must reproduce the above copyright
       *       notice, this list of conditions and the following disclaimer in the
       *       documentation and/or other materials provided with the
       *       distribution.
       *    3. Neither the name of XRADIO TECHNOLOGY CO., LTD. nor the names of
       *       its contributors may be used to endorse or promote products derived
       *       from this software without specific prior written permission.
       *
       *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
       *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
       *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
       *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
       *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
       *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
       *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
       *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
       *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       */
      
      #include <stdio.h>
      #include "kernel/os/os.h"
      #include "common/framework/platform_init.h"
      #include "net/wlan/wlan.h"
      #include "common/framework/net_ctrl.h"
      #include "net/HTTPClient/HTTPCUsr_api.h"
      #include "mbedtls/mbedtls.h"
      
      
      #include "cjson/cJSON.h"
      
      
      
      #define  DEMO_TEST_FUNC_TIME		1
      #define  DEMO_TEST_FUNC_WEATHER		2
      
      #define  DEMO_TEST_FUNC				DEMO_TEST_FUNC_WEATHER
      
      #define HTTPC_DEMO_THREAD_STACK_SIZE (16 * 1024) /* ssl need more stack */
      static OS_Thread_t httpc_demo_thread;
      
      #if (DEMO_TEST_FUNC == DEMO_TEST_FUNC_WEATHER)
      #	define HTTPC_DEMO_URL "http://t.weather.sojson.com/api/weather/city/101210101"
      #else
      #	define HTTPC_DEMO_URL "http://quan.suning.com/getSysTime.do"
      #endif
      
      static HTTPParameters httpc_demo_param;
      char httpc_demo_buf[8192] = {0};
      
      
      static void httpc_demo_download(char *url, int use_ssl)
      {
      	uint32_t download_len = 0;
      	INT32 recv_len = 0;
      	int32_t ret;
      	uint32_t download_time = 0;
      
      	memset(&httpc_demo_param, 0, sizeof(httpc_demo_param));
      	memcpy(httpc_demo_param.Uri, url, strlen(url));
      	httpc_demo_param.nTimeout = 30; //timeout 30s for every get
      
      	download_time = OS_GetTicks();
      
      	memset(httpc_demo_buf, 0, sizeof(httpc_demo_buf));
      
      	while (1) {
      		ret = HTTPC_get(&httpc_demo_param, httpc_demo_buf, sizeof(httpc_demo_buf), &recv_len);
      
      		if (ret != HTTP_CLIENT_SUCCESS) {
      			break;
      		}
      		download_len += recv_len;
      		printf("%.*s", sizeof(httpc_demo_buf), httpc_demo_buf);
      
      		printf("\n\nhttp get return value: %d, len=%u\n\n", ret, download_len);
      	}
      	if (ret == HTTP_CLIENT_EOS) {
      		download_time = OS_GetTicks() - download_time;
      		printf("\n\n\ndownload complete, download_len %d, time %ds\n\n\n",
      		       download_len, download_time/1000);
      
      		cJSON* cjson = cJSON_Parse(httpc_demo_buf);//将JSON字符串转换成JSON结构体
      		if(cjson == NULL)						//判断转换是否成功
      		{
      			printf("cjson error...\n\n");
      		}
      		else
      		{
      			printf("%s\n\n",cJSON_Print(cjson));//打包成功调用cJSON_Print打印输出
      
      #if (DEMO_TEST_FUNC == DEMO_TEST_FUNC_WEATHER)
      			char * city = cJSON_GetObjectItem(cjson,"city")->valuestring;	
      			char * temp = cJSON_GetObjectItem(cjson,"wendu")->valuestring;	
      			char * humi = cJSON_GetObjectItem(cjson,"shidu")->valuestring;	
      
      			printf("城市: %s\n",city);
      			printf("温度:%s\n",temp);
      			printf("湿度:%s\n",humi);
      #else
      			char * time_1 = cJSON_GetObjectItem(cjson,"sysTime1")->valuestring;
      			char * time_2 = cJSON_GetObjectItem(cjson,"sysTime2")->valuestring;
      
      			printf("time_1: %s\n\n",time_1);
      			printf("time_2: %s\n\n",time_2);
      #endif
      		}
      	} else {
      		printf("\n\ndownload error, ret=%d\n", ret);
      	}
      }
      
      static void httpc_demo_fun(void *arg)
      {
      	while(1)
      	{
      		httpc_demo_download(HTTPC_DEMO_URL, 0);
      		OS_MSleep(5000);
      	}	
      
      	OS_ThreadDelete(&httpc_demo_thread);
      }
      
      static void net_cb(uint32_t event, uint32_t data, void *arg)
      {
      	uint16_t type = EVENT_SUBTYPE(event);
      
      	switch (type) {
      	case NET_CTRL_MSG_NETWORK_UP:
      		if (!OS_ThreadIsValid(&httpc_demo_thread)) {
      			OS_ThreadCreate(&httpc_demo_thread,
      			                    "httpc_demo_thread",
      			                    httpc_demo_fun,
      			                    (void *)NULL,
      			                    OS_THREAD_PRIO_APP,
      			                    HTTPC_DEMO_THREAD_STACK_SIZE);
      		}
      		break;
      
      	case NET_CTRL_MSG_NETWORK_DOWN:
      		break;
      
      	default:
      		break;
      	}
      
      }
      
      int main(void)
      {
      	observer_base *net_ob;
      
      	platform_init();
      
      	printf("httpc demo start\n\n");
      
      	printf("use these commands to connect ap:\n\n");
      	printf("1. config ssid and password : net sta config ssid password\n");
      	printf("2. enable sta to connect ap : net sta enable\n\n");
      
      	/* create an observer to monitor the net work state */
      	net_ob = sys_callback_observer_create(CTRL_MSG_TYPE_NETWORK,
      	                                     NET_CTRL_MSG_ALL,
      	                                     net_cb,
      	                                     NULL);
      	if (net_ob == NULL)
      		return -1;
      
      	if (sys_ctrl_attach(net_ob) != 0)
      		return -1;
      
      	return 0;
      }
      
      
      

      1bff697d-4e41-4cfc-ab03-2ab9f825f8b8-image.png

      配网之后,拉取http数据,出现了后半段乱码的情形

      5117d7af-a5c3-4cb9-888d-43ae10c1854f-image.png

      判了一小段时间更是出现了heap问题
      96250826-7d51-4fe0-b0f6-f4cab5e7b48a-image.png

      但我看这个heap已经开到了200多KB了,应该不至于这么快出现问题
      d6f6d6bd-8975-48c5-b7de-85b4e6bc1b18-image.png

      请大神们帮忙把把关,把把脉,感激不尽!

      httpc.rar

      发布在 Wireless & Analog Series
      T
      Tristan_C
    • 【XR806开发板试用】+ 通过网络控制led并上报按键状态

      通过网络控制led并上报按键状态

      本次做一个手机通过mqtt服务器控制板子上的LED亮灭,板子也可以将按钮状态变化通过mqtt服务器上报给手机的功能
      硬件上,从原理图看,LED接到了PA21,高电平点亮。
      f8d503a6-686e-4602-a189-3496ecc6bfc1-image.png
      按键则时接到了PA11,并接了一个上拉电阻。
      f2487c6b-be8f-4acb-a54d-7613947bed84-image.png

      因此,设计上就可以通过按键上升沿中断,作为按键按下一次的事件,然后本地取反一次LED灯,并publish灯的状态给手机端,同时,会subscribe订阅灯的状态,接收手机端publish过来的LED控制数据。而手机端则可以publish控制数据,其中0作为关灯,发送1作为开灯,同时也subscribe订阅板子publish上来的LED状态数据。
      Mqtt的服务器使用自行搭建的emqx broker
      da08c02b-0346-47b8-9a19-3c32880519a1-image.png

      下面就开始整代码。首先拷贝mqtt demo代码默认配置
      cp project/demo/hello_demo/gcc/defconfig .config
      然后先make build_clean将之前的代码清掉
      然后使用vim打开mqtt的main.c代码

      先定义LED和key的io引脚
      5245cc42-30f4-42a9-a174-005e85c54a38-image.png

      再进行引脚的初始化,初始化中进行了LED亮灭2次闪烁,表示初始化成功。定义按键引脚为上升沿中断,中断中取反LED的亮灭状态,并更新led_state的值。
      abce267f-2a73-4e65-ba27-0a8b33c239a5-image.png

      然后在main函数中调用初始化。
      55d0793c-993c-44f1-b193-18f16f6aacaa-image.png

      下面进行mqtt服务器相关参数的配置,如下,这里定义了两个topic,分别是MQTT_DEMO_TOPIC和MQTT_DEMO_PUB_TOPIC,前者订阅LED的状态,以控制LED的亮灭,后者则可上报按钮状态。HOST_NAME为mqtt服务器主机的ip地址或者域名

      68186bbf-995e-43a6-8da1-2994a8aeae5f-image.png

      初始化 mqtt
      08b2d8bc-f84b-449e-adfd-beb85a8ffce9-image.png

      Mqtt连接
      49eed009-e8e7-4648-a9bd-1dbef1e45b9a-image.png

      订阅以及订阅的消息回调,其中在消息回调中,判断接收到的消息是字符0还是字符1,并进行响应的LED亮灭操作。

      发布则是进行对应主题的发布操作
      aaa6e02a-7fef-4022-a640-0b9cb60189f7-image.png

      接下去就是mqtt主处理功能函数,其中主要是维持mqtt连接,并根据本地的按键控制的LED状态是否改变,决定是否publish上报改状态
      7cfee316-0457-4f83-9336-b8bcd398205a-image.png

      最后就是主函数初始化硬件、功能和网络,并启动mqtt主进程了。

      编译,下载运行
      2f317d2d-6516-4540-a256-5a94ec8aec26-image.png

      使用mobaxterm打开端口终端,可以看到如下打印信息
      ee303a86-845c-4d2e-8f82-e2e06f344a5f-image.png

      Wlan的wifi ssid和password是通过命令行command line的方式进行配置的
      3a22b0ae-56eb-40fa-b4cd-d5a1522f2118-image.png

      6b4939c6-97b0-4385-af3e-5721a913bba3-image.png

      我们需要使用的主要是上面的三条,分别是
      配置ssid:net ap set ssid ssid_example
      配置password:net ap set psk psk_example
      使能启动连接:net ap enable
      连接wifi并成功连接mqtt服务器
      afce1e47-d3d8-4adb-8d1c-0236f5493a6b-image.png

      此时mqtt broker服务器上也就能看到开发板设备连接上了
      4355e358-fdb3-4834-859d-1ac264e10300-image.png

      打开手机的MQTTool工具app(iPhone)
      点击connect
      e54a4924-2ac3-4025-9daa-47681778bff4-image.png

      就可以在emqx上看到对应的手机设备连接了
      88c869f7-3f05-4e31-9c7a-410120176728-image.png

      App切换到subscribe选项卡,输入 KEY/STATE 订阅主题,并点击Subscribe订阅该主题
      d8008a53-f707-41fe-91bf-3ba14f0c9cfb-image.png

      轻按开发板上的按钮,可以看到板载的LED亮灭切换

      99c08f60-4d6b-45ef-8f3a-68f807233ada-image.png
      e8acb4c9-dcc8-48bb-8051-24b5fe2690a6-image.png

      同时串口终端中输出对应的信息
      51f78850-0f49-425a-8489-f953aa00f6e2-image.png

      而在手机端的app上,切换到subscr选项卡,就可以看到每按一次按键,开发板publish发不上来的消息了
      c0ebc3da-e265-41cf-8033-7ea0031e8506-image.png

      再切换到Publish选项卡,输入 LED/STATE 内容作为publish发布的主题
      此时在Message框中输入1,并点击publish,就可以看到灯亮起
      33c1d4a0-1e42-4fcd-89ff-dce5a6c59613-image.png
      796436a9-f84a-4d97-9000-b48f022a867f-image.png

      而输入0并点击publish发布,则看到灯灭
      598a96d5-643f-4c14-8e08-f8634dde7ab2-image.png

      1520055a-594e-4095-8282-487227d67cd7-image.png

      同时,开发板在收到上述的两次publish主题消息之后,还会在串口终端上打印如下内容。
      b700fb68-a653-482d-b5b3-caba3e2e728d-image.png

      在emqx上可以看到完整的主题
      6aa49719-40f3-491d-9d1f-05ac189b0512-image.png

      以及订阅方了
      966ef631-0b1d-4192-ade7-f2262b4e03f6-image.png

      至此,小制作实现了LED和按钮的功能,并通过mqtt,实现手机与板子之间的状态上报和控制信息下行。

      发布在 Wireless & Analog Series
      T
      Tristan_C
    • 【XR806开发板试用】+ 开箱及环境搭建

      开箱及开发环境准备

      一、开箱
      很感谢极术和全志给与评测的机会,对于初学者来讲能有机会体验也是很幸运。收到第一时间开箱,实物如下。

      1292e5e0-31ed-4195-803d-ff6dd4a37258-image.png

      ae40f155-4a2f-40f9-86c1-bb612ea76f0e-image.png

      评估版采用成品模块+测试底板的方式,其中,模块采用XR806AF2L,采用QFN32封装芯片,使用PCB天线,做成模块也非常适合直接商用。模块板载一颗高频40MHz晶振,未使用32KHz低频晶振,应该是使用了内部的RC。模块上的器件比绍,集成度还是非常高的,模块体积尺寸看起来还可以做得更小。
      0f750a36-bcdc-4c5d-b292-82323f68eeb4-image.png
      062efccb-6d95-4cc1-956c-9aab35b807f5-image.png
      底板则除了XR806之外,包含供电系统,并增加了USB接口,接了一片CP2102做USB转串口。外接两颗按钮和一颗LED,并将空闲管脚引出
      4f7bee9a-4822-4aec-9d85-82bf3fe87432-image.png
      26d6eb18-1ba3-4965-b98d-c004aa85d8d0-image.png
      8e6c3855-4ddf-40f7-a9a0-53876d4723c5-image.png
      024e72c4-d8dc-49fb-98e0-e5b546cd942e-image.png

      作为评估版,基本功能已经够用。

      下面看下主芯片XR806
      这是21变全志发布的芯片,是一款基于安谋科技的STAR-MC1处理器来研发设计的支持WiFi和BLE的高集成度无线MCU,目前已经支持鸿蒙系统和Free RTOS系统。
      下图为其芯片内部框图
      芯片最高主频可达160MHz,内置SIP 288KB SRAM,SIP 160KB Code ROM,以及2MB的XIP Flash
      8a3ccfd3-79a2-4511-bdc8-4ecfb06680f1-image.png
      be5c4b97-a630-48b1-82ad-30f66a70017a-image.png

      二、开发环境准备
      下面来准备一下开发环境
      产品目前支持Linux环境开发,因此我也选择改方式,当然也是我第一次尝试Linux环境的arm开发。工具采用如下组合:
      Win11 + WSL2 + gcc-arm+VSC
      其中win11和WSL2的安装不做记录了,按照win11的操作在应用商店即可。下面记录gcc-arm和xr806的sdk安装。注意:以下操作有可能需要sudo权限,记录中不一定完全体现
      1.源码sdk
      下载和解压安装,使用如下命令下载:
      wget https://bbs.aw-ol.com/assets/uploads/files/1693988430633-xr806_sdk.tar.gz
      然后解压:
      tar xvf 1693988430633-xr806_sdk.tar.gz
      2.gcc-arm
      下载gcc-arm工具链
      wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/8-2019q3/RC1.1/gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2
      同样是压缩文件需要解压,可以把压缩包放置到用户文件下的tools
      90dbbc46-8144-4829-b7c9-246a6cda31cf-image.png

      tar xvf gcc-arm-none-eabi-8-2019-q3-update-linux.tar.bz2 -C ~/tools/
      如果没有tools,可能得创建mkdir一下
      3.更改gcc.mk中的gcc-arm的路径
      代码编译前需要在“gcc.mk”中设置正确的GCC 交叉编译工具链路径,进入sdk安装路径
      860ac1b1-30ac-4661-9768-246ec39d83cc-image.png
      并使用vim打开gcc.mk,然后将CC_DIR更改为如下路径
      813e3002-1cad-4e55-8311-78e3e2cf3879-image.png

      4.应用开发示例
      接下来就可以使用代码编译和镜像创建了,以 hello_demo 工程为例

      复制默认配置文件到顶层目录(不切换工程可不要此步骤)

      $ cp project/demo/hello_demo/gcc/defconfig .config

      检查SDK 基础配置,如工程名、芯片型号、高频晶振、板级配置是否正确

      $ make menuconfig
      28728e4f-c49b-40ca-bb55-5c2c70bc5c18-image.png

      清理,切换工程时需要

      $ make build_clean
      cbcfcb61-ca75-498e-9d41-b338254babc4-image.png

      编译代码并生成镜像文件,生成的镜像文件为“out/xr_system.img”

      $ make build(建议使用make build -j 加速编译),编译通过如下
      bc868cd5-2ba1-4407-abf5-19f9ac478b1f-image.png

      在sdk安装文件夹下,有一个out文件夹,生成的镜像目标文件就在此处,可以查看生成的相关文件。
      1c43b858-62db-4989-932b-f0157abc3055-image.png

      然后我们就可以进行程序烧写,将开发板通过USB接到PC,并打开phoenixMC.exe,找到对应的镜像文件,并选择正确的端口号,点击右上角的升级固件即可开始下载。
      77c2757d-1492-4299-b032-4756bf411cbc-image.png

      下载成功之后,在PC端打开串口调试助手,选择正确的COM号和波特率,即可看到hello word例程打印的如下信息了。

      74641c9e-8eb7-4cb4-91bb-c9522a1aa61c-image.png

      需要注意的是,如果在下载的过程中提示如下错误
      dcbd11ce-bd24-46de-bde6-eade14090f5f-image.png

      ebdc91f5-5619-45cb-a370-567451a849e7-image.png

      可以通过重新安装CP2102的最新版本驱动,连接如下:
      https://www.silabs.com/documents/public/software/CP210x_Universal_Windows_Driver.zip

      下面来增加VSC的支持
      VSC的按爪个不赘述了,按照安装
      然后在扩展插件中搜索WSL,并安装
      57e866aa-3482-45dd-816a-752630255f8e-image.png

      安装完成就可以点击左下角
      99740167-2839-47fb-b8f7-7c64ee5b3177-image.png

      或者Ctrl+Shift+p
      5eab5fc5-6717-46cd-86ed-bb6e58dbc8e6-image.png

      点击连接到WSL了
      然后在终端中,cd进入到sdk所在路径
      47290d7a-22c8-4d0b-8292-dcbc3b3d6e96-image.png

      输入code . 即可打开sdk文件夹了
      41b4587c-bd88-4957-99a8-f41d340c21c6-image.png

      至此环境搭建完成。

      发布在 Wireless & Analog Series
      T
      Tristan_C