Hi3861开发板介绍
本文档介绍Hi3861 WLAN模组的开发环境搭建、版本编译构建、烧录、源码修改、调试验证等方法。通过学习,开发者会对Hi3861 WLAN模组开发流程有初步认识,并可上手业务开发。

开发板简介

Hi3861 WLAN模组是一片大约2cm*5cm大小的开发板,是一款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基带和RF(Radio Frequency)电路。支持HarmonyOS,并配套提供开放、易用的开发和调试运行环境。

图1 Hi3861 WLAN模组外观图

另外,Hi3861 WLAN模组还可以通过与Hi3861底板连接,扩充自身的外设能力,底板如下图所示。

图2 Hi3861底板外观图

RF电路包括功率放大器PA(Power Amplifier)、低噪声放大器LNA(Low Noise Amplifier)、RF Balun、天线开关以及电源管理等模块;支持20MHz标准带宽和5MHz/10MHz窄带宽,提供最大72.2Mbit/s物理层速率。
Hi3861 WLAN基带支持正交频分复用(OFDM)技术,并向下兼容直接序列扩频(DSSS)和补码键控(CCK)技术,支持IEEE 802.11 b/g/n协议的各种数据速率。
Hi3861芯片集成高性能32bit微处理器、硬件安全引擎以及丰富的外设接口,外设接口包括SPI(Synchronous Peripheral Interface)、UART(Universal Asynchronous Receiver & Transmitter)、I2C(The Inter Integrated Circuit)、PWM(Pulse Width Modulation)、GPIO(General Purpose Input/Output)和多路ADC(Analog to Digital Converter),同时支持高速SDIO2.0(Secure Digital Input/Output)接口,最高时钟可达50MHz;芯片内置SRAM(Static Random Access Memory)和Flash,可独立运行,并支持在Flash上运行程序。
Hi3861芯片适用于智能家电等物联网智能终端领域。图3 Hi3861功能框图


资源和约束

Hi3861 WLAN模组资源十分有限,整板共2MB FLASH,352KB RAM。在编写业务代码时,需注意资源使用效率。

开发板规格

表1 Hi3861 WLAN模组规格清单
规格类型

规格清单

通用规格

1×1 2.4GHz频段(ch1~ch14)
PHY支持IEEE 802.11b/g/n
MAC支持IEEE802.11 d/e/h/i/k/v/w
内置PA和LNA,集成TX/RX Switch、Balun等
支持STA和AP形态,作为AP时最大支持6 个STA接入
支持WFA WPA/WPA2 personal、WPS2.0
支持与BT/BLE芯片共存的2/3/4 线PTA方案
电源电压输入范围:2.3V~3.6V
IO电源电压支持1.8V和3.3V
支持RF自校准方案
低功耗:
Ultra Deep Sleep模式:5μA@3.3V
DTIM1:1.5mA@3.3V
DTIM3:0.8mA@3.3V
PHY特性

支持IEEE802.11b/g/n单天线所有的数据速率
支持最大速率:72.2Mbps@HT20 MCS7
支持标准20MHz带宽和5M/10M窄带宽
支持STBC
支持Short-GI
MAC特性

支持A-MPDU,A-MSDU
支持Blk-ACK
支持QoS,满足不同业务服务质量需求
CPU子系统

高性能 32bit微处理器,最大工作频率160MHz
内嵌SRAM 352KB、ROM 288KB
内嵌 2MB Flash
外围接口

1个SDIO接口、2个SPI接口、2个I2C接口、3个UART接口、15个GPIO接口、7路ADC输入、6路PWM、1个I2S接口(注:上述接口通过复用实现)
外部主晶体频率40M或24M
其他信息

封装:QFN-32,5mm×5mm
工作温度:-40℃ ~ +85℃
HarmonyOS关键特性

HarmonyOS基于Hi3861平台提供了多种开放能力,提供的关键组件如下表所示。

表2 HarmonyOS关键组件列表
组件名

能力介绍

WLAN服务

提供WLAN服务能力。包括:station和hotspot模式的连接、断开、状态查询等。

模组外设控制

提供操作外设的能力。包括:I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。

分布式软总线

在HarmonyOS分布式网络中,提供设备被发现、数据传输的能力。

设备安全绑定

提供在设备互联场景中,数据在设备之间的安全流转的能力。

基础加解密

提供密钥管理、加解密等能力。

系统服务管理

系统服务管理基于面向服务的架构,提供了HarmonyOS统一化的系统服务开发框架。

启动引导

提供系统服务的启动入口标识。在系统服务管理启动时,调用boostrap标识的入口函数,并启动系统服务。

系统属性

提供获取与设置系统属性的能力。

基础库

提供公共基础库能力。包括:文件操作、KV存储管理等。

DFX

提供DFX能力。包括:流水日志、时间打点等。

XTS

提供HarmonyOS生态认证测试套件的集合能力。

安装开发板环境

  • Hi3861工具要求

    • 硬件要求
    • 软件要求
  • 安装Linux编译工具

    • 安装编译依赖基础软件(仅Ubuntu 20+需要)
    • 安装Scons
    • 安装python模块
    • 安装gcc_riscv32(WLAN模组类编译工具链)

Hi3861工具要求

硬件要求

  • Linux工作台
  • Hi3861开发板
  • USB Type-C线(Linux工作台通过USB与Hi3861开发板连接)

软件要求

须知: 本节描述采用安装包方式安装相关工具的操作步骤。如果使用Docker方式安装,无需安装表1中的相关工具,请直接从新建应用程序开始操作。

Hi3861开发板需要的工具如下表所示。

表 1 Hi3861开发板需要安装的工具

开发工具

用途

编译基础软件包(仅ubuntu 20+需要)

编译依赖的基础软件包

SCons3.0.4+

编译构建工具

python模块:setuptools、kconfiglib、pycryptodome、six、ecdsa

编译构建工具

gcc riscv32

编译构建工具

安装Linux编译工具

安装编译依赖基础软件(仅Ubuntu 20+需要)

执行以下命令进行安装:

sudo apt-get install build-essential gcc g++ make zlib* libffi-dev

安装Scons

  1. 运行如下命令,安装SCons安装包。

    python3 -m pip install scons
  2. 运行如下命令,查看是否安装成功。如果安装成功,查询结果下图所示。

    scons -v

    图 1 SCons安装成功界面,版本要求3.0.4以上

安装python模块

  1. 运行如下命令,安装python模块setuptools。

    pip3 install setuptools
  2. 安装GUI menuconfig工具(Kconfiglib),建议安装Kconfiglib 13.2.0+版本,任选如下一种方式。

    • 命令行方式:

      sudo pip3 install kconfiglib
    • 安装包方式:

      1. 下载.whl文件(例如:kconfiglib-13.2.0-py2.py3-none-any.whl)。

        下载路径:“https://pypi.org/project/kconfiglib#files”

      2. 运行如下命令,安装.whl文件。

        sudo pip3 install kconfiglib-13.2.0-py2.py3-none-any.whl
  3. 安装pycryptodome,任选如下一种方式。

    安装升级文件签名依赖的Python组件包,包括:pycryptodome、six、ecdsa。安装ecdsa依赖six,请先安装six,再安装ecdsa。

    • 命令行方式:

      sudo pip3 install pycryptodome
    • 安装包方式:

      1. 下载.whl文件(例如:pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl)。

        下载路径:“https://pypi.org/project/pycryptodome/#files”。

      2. 运行如下命令,安装.whl文件。

        sudo pip3 install pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl
  4. 安装six,任选如下一种方式。

    • 命令行方式:

      sudo pip3 install six --upgrade --ignore-installed six
    • 安装包方式:

      1. 下载.whl文件(例如:six-1.12.0-py2.py3-none-any.whl)。

        下载路径:“https://pypi.org/project/six/#files”

      2. 运行如下命令,安装.whl文件。

        sudo pip3 install six-1.12.0-py2.py3-none-any.whl
  5. 安装ecdsa,任选如下一种方式。

    • 命令行方式:

      sudo pip3 install ecdsa
    • 安装包方式:

      1. 下载.whl文件(例如:ecdsa-0.14.1-py2.py3-none-any.whl)。

        下载路径:“https://pypi.org/project/ecdsa/#files”

      2. 运行如下命令,安装.whl文件。

        sudo pip3 install ecdsa-0.14.1-py2.py3-none-any.whl

安装gcc_riscv32(WLAN模组类编译工具链)

须知:

  • Hi3861开发板平台仅支持使用libgcc运行时库的静态链接,不建议开发者使用libgcc运行时库的动态链接,以免产品需遵从GPLV3许可证。
  • 通过下述步骤2-15,我们编译好了gcc_riscv32 镜像,提供给开发者直接下载使用。直接下载 gcc_riscv32 镜像的开发者可省略下述2-15步。
  1. 打开Linux编译服务器终端。

  2. 环境准备,请安装"gcc, g++, bison, flex, makeinfo"软件,确保工具链能正确编译。

    sudo apt-get install gcc && sudo apt-get install g++ && sudo apt-get install flex bison && sudo apt-get install texinfo
  3. 下载riscv-gnu-toolchain交叉编译工具链。

    git clone --recursive https://gitee.com/mirrors/riscv-gnu-toolchain.git
  4. 打开文件夹riscv-gnu-toolchain,先删除空文件夹,以防止下载newlib,binutils,gcc时冲突。

    cd riscv-gnu-toolchain && rm -rf riscv-newlib && rm -rf riscv-binutils && rm -rf riscv-gcc
  5. 下载riscv-newlib-3.0.0。

    git clone -b riscv-newlib-3.0.0 https://github.com/riscv/riscv-newlib.git
  6. 下载riscv-binutils-2.31.1。

    git clone -b riscv-binutils-2.31.1 https://github.com/riscv/riscv-binutils-gdb.git
  7. 下载riscv-gcc-7.3.0。

    git clone -b riscv-gcc-7.3.0 https://github.com/riscv/riscv-gcc
  8. 添加riscv-gcc-7.3.0补丁。

    访问gcc官方补丁链接89411,86724,按照补丁链接中要求的修改,手动将变更添加到对应的.c和.h文件中,注意由于patch版本与下载的gcc版本有所偏差,行数有可能对应不上,请自行查找patch中的关键字定位到对应行。

  9. 下载GMP 6.1.2,并解压安装。

    tar -xvf gmp-6.1.2.tar.bz2 && mkdir build_gmp && cd build_gmp && ../gmp-6.1.2/configure --prefix=/usr/local/gmp-6.1.2 --disable-shared --enable-cxx && make && make install
  10. 下载mpfr-4.0.2 ,并解压安装。

    tar -xvf mpfr-4.0.2.tar.gz && mkdir build_mpfr && cd build_mpfr && ../mpfr-4.0.2/configure --prefix=/usr/local/mpfr-4.0.2 --with-gmp=/usr/local/gmp-6.1.2 --disable-shared && make && make install
  11. 下载mpc-1.1.0 ,并解压安装。

    tar -xvf mpc-1.1.0.tar.gz && mkdir build_mpc && cd build_mpc && ../mpc-1.1.0/configure --prefix=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2 --disable-shared && make && make install
  12. 打开文件夹riscv-gnu-toolchain,新建工具链输出目录。

    cd /opt && mkdir gcc_riscv32
  13. 编译binutils。

    mkdir build_binutils && cd build_binutils && ../riscv-binutils-gdb/configure --prefix=/opt/gcc_riscv32 --target=riscv32-unknown-elf --with-arch=rv32imc --with-abi=ilp32 --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --enable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-multilib --enable-poison-system-directories --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-system-zlib CFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" CFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" --bindir=/opt/gcc_riscv32/bin --libexecdir=/opt/gcc_riscv32/riscv32 --libdir=/opt/gcc_riscv32 --includedir=/opt/gcc_riscv32 && make -j16 && make install && cd ..
  14. 编译newlib。

    mkdir build_newlib && cd build_newlib && ../riscv-newlib/configure --prefix=/opt/gcc_riscv32 --target=riscv32-unknown-elf --with-arch=rv32imc --with-abi=ilp32 --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --enable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-multilib --enable-poison-system-directories --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-system-zlib CFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" \CXXFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" CFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" --bindir=/opt/gcc_riscv32/bin --libexecdir=/opt/gcc_riscv32 --libdir=/opt/gcc_riscv32 --includedir=/opt/gcc_riscv32 && make -j16 && make install && cd ..
  15. 编译gcc。

    mkdir build_gcc && cd build_gcc && ../riscv-gcc/configure --prefix=/opt/gcc_riscv32 --target=riscv32-unknown-elf --with-arch=rv32imc --with-abi=ilp32 --disable-__cxa_atexit --disable-libgomp --disable-libmudflap --enable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-multilib --enable-poison-system-directories --enable-languages=c,c++ --with-gnu-as --with-gnu-ld --with-newlib --with-system-zlib CFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" CXXFLAGS="-fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack -fPIE" LDFLAGS="-Wl,-z,relro,-z,now,-z,noexecstack" CXXFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" CFLAGS_FOR_TARGET="-Os -mcmodel=medlow -Wall -fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -Wtrampolines -fno-short-enums -fno-short-wchar" --with-headers="/opt/gcc-riscv32/riscv32-unknown-elf/include" --with-mpc=/usr/local/mpc-1.1.0 --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.2 && make -j16 && make install
  16. 设置环境变量。

    说明: 如果直接采用编译好的riscv32 gcc包,请先执行以下命令将压缩包解压到根目录:

    tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~
    vim ~/.bashrc

    将以下命令拷贝到.bashrc文件的最后一行,保存并退出。

    export PATH=~/gcc_riscv32/bin:$PATH
  17. 生效环境变量。

    source ~/.bashrc
  18. Shell命令行中输入如下命令,如果能正确显示编译器版本号,表明编译器安装成功。

    riscv32-unknown-elf-gcc -v

Hi3861开发环境相关推荐

  1. 鸿蒙硬件HI3861开发环境搭建-串口2测试

    鸿蒙硬件HI3861开发环境搭建-串口2测试 鸿蒙硬件HI3861开发环境搭建-串口2测试 - 哔哩哔哩 鸿蒙其他教程请看https://blog.csdn.net/qq_33259323/categ ...

  2. 鸿蒙硬件HI3861开发环境搭建

    鸿蒙HI3861开发环境搭建 最新的环境搭建教程请看:https://blog.csdn.net/qq_33259323/article/details/117854579 鸿蒙其他教程请看https ...

  3. Hi3861开发环境搭建 ||避坑指南|| [适用于几乎所有以Hi3861为主控的开发板]

    Hi3861开发环境搭建 ||避坑指南|| [适用于几乎所有以Hi3861为主控的开发板] 前言: 这几天为了搭建Hi3861的开发环境,看了不少官方文档和视频,但是依然折腾了很久才配置好编译.上传都 ...

  4. 鸿蒙硬件开发:Hi3861开发环境搭建及Windows下编译下载程序

    Windows开发环境准备 可参考官方文档Windows开发环境准备进行配置. 安装VS Code https://code.visualstudio.com/Download 安装Python ht ...

  5. 物联网实践|Huawei LiteOS开发环境搭建及在Hi3861上跑Demo

    简介 本次实践是为尝试在嵌有华为海思芯片的Hi3861WIFI物联网开发板上配置开发环境并使用配套开发工具(HUAWEI DevEco Device Tool或HUAWEI LiteOS Studio ...

  6. W800/Nepture/Hi3861/BL602 Harmony OS IOT Linux下开发环境搭建

    OpenHarmony(以下简称OH)自开源以来,已经过去了1年多.一年多时间,许多厂商争先恐后加入到OH的队伍中来,这一年多,发展迅速. 我有幸可以在这OH发展的初期加入到OH的开发中来,成为OH中 ...

  7. Mac安装鸿蒙系统,搭建MAC系统下的Wi-Fi loT Hi3861鸿蒙开发环境

    前言 周二就收到了Wi-Fi loT Hi3861的试用开发板,最近忙的一直没有时间开始研究,终于今天周六睡了一个大懒觉起来开始准备开发环境. 因为harmonyos目前只能使用ubuntu进行编译, ...

  8. 【填坑】海思wifi平台Hi3861开发(上) -- 搭建环境篇

    文章目录 背景 处处坑 1. 编译环境 Ubuntu Python 报错 去找客户 新虚拟机OK 2. 开发SDK 背景 近期在海思的一款wifi模组Hi3861V100上开发,想来和ESP模组应该很 ...

  9. LiteOS学习---开发环境初识

    背景介绍 记得电影<一代宗师中>,有这样一句话 也是时势使然,某为厂成了面子,欺负它就等于打了国人的脸,至于它担不担得起,另说. 早在2015年,华为就推出了这个LiteOS.如果问它和鸿 ...

最新文章

  1. hub,桥,交换机,路由器的区别
  2. 视频直播技术:最大限度保障流畅性和清晰度
  3. Maven nexus私服仓库类型说明及配置阿里云代理仓库
  4. 2.4 multiset
  5. Hbase入门——安装
  6. shiro 解决 跨域(仅端口不同) 登陆 问题
  7. 截止2020年06月06日证书获得
  8. shell中的文本处理(grep、sed、awk命令)
  9. 快速搭建本地服务器 php,本地PHP服务器环境快速搭建
  10. element-ui主表格多选后 二级弹框表格默认全选数据
  11. [漏洞案例]thinkcmf 2.x从sql注入到getshell实战
  12. 软件开发模型2:增量模型/螺旋模型/敏捷模型
  13. wince车机刷carplay_WINCE 使用 CarPlay,老唐开新花
  14. Blender物理引擎
  15. 使用GPG实现密码学应用
  16. 课程设计题七:交通灯控制器
  17. 量化基金投资之Alpha策略简介
  18. 腾达路由器连接移动路由器,做WIFI信号延申
  19. 安卓搜不到airpods_airpods忽略设备后再也搜不到了怎么办
  20. 鼠标跟计算机的USB设备运行不正常,为什么鼠标跟这台计算机连接的一个USB设备运行不正常,windo? 爱问知识人...

热门文章

  1. 微信公众平台获取测试号的appID和appsecret
  2. 订单 图片(一对多关系),地址保存在一个字段中(Json数组对象格式)
  3. java如何利用rotate旋转图片_java实现图片无损任意角度旋转
  4. python 设计模式 代理模式
  5. git master回退到某个版本
  6. Linux top 命令的参数详解
  7. Unity中游戏重新加载玩家位置不变的方法
  8. 我的世界修复服务器指令,我的世界服务器指令 我的世界服务器地址大全
  9. 【酷炫】相对论并非遥不可及
  10. WebService是什么?他究竟和WebSocket有什么关系?