第3章 海思平台初探:认识Hi3516DV300开发板

好,咱们正式开始接触硬件了。

这一章,我带大家看看Hi3516DV300这块板子。说实话,我第一次拿到这块开发板时,第一反应是——这玩意儿比我想象的小多了。但别小看它,麻雀虽小五脏俱全。

3.1 开发板硬件概览

Hi3516DV300是海思针对智能视觉领域推出的一颗SoC。它集成了ARM Cortex-A7双核处理器,主频能跑到900MHz。我刚开始做项目时,总觉得主频越高越好,后来发现对于嵌入式视觉应用,900MHz其实已经够用了。

这块板子的核心参数,我整理了一下:

项目 参数
CPU ARM Cortex-A7 双核 @ 900MHz
DDR DDR3/DDR3L,最大支持2GB
Flash SPI NOR/NAND Flash,eMMC
视频编解码 H.264/H.265 硬件编解码
网络 百兆以太网
接口 UART、I2C、SPI、USB、SDIO等

嗯,这里要注意一点。这块板子的DDR和Flash是板载的,不是插槽式的。这意味着你没法像玩PC一样随便换内存条。所以选型时一定要确认好容量。

3.2 查看芯片手册

做嵌入式开发,不看芯片手册等于闭着眼睛开车。我个人习惯是,拿到一块新板子,先翻三样东西:

  • Datasheet:芯片的电气特性、引脚定义、封装信息
  • User Manual:寄存器描述、功能模块说明
  • Hardware Design Guide:硬件设计参考,包括电源、时钟、复位等

我在项目中遇到过一件事。有次调试一个I2C设备,死活不通。折腾了两天,最后发现是引脚复用配置错了。你想想看,芯片手册里明明写着GPIO6_3可以复用为I2C0_SDA,但我没仔细看复用表,直接当普通GPIO用了。嗯,从那以后我再也不敢跳过引脚复用章节了。

Hi3516DV300的芯片手册,重点关注这几个章节:

  • 第2章:系统架构——了解整体框图
  • 第5章:内存映射——DDR和Flash地址空间
  • 第12章:启动模式——Boot ROM和启动流程
  • 第18章:时钟与复位——系统时钟树
我的小技巧:芯片手册动辄上千页,别从头读到尾。先看目录,找到你当前需要的章节。比如移植系统,先看启动流程和内存映射就够了。

3.3 了解DDR与Flash分区

移植鸿蒙系统,分区规划是重头戏。说白了,就是决定哪块内存放什么。

Hi3516DV300的典型分区方案,我给大家画个简表:

分区名称 起始地址 大小 用途
boot 0x00000000 1MB U-Boot引导程序
kernel 0x00100000 8MB 鸿蒙内核镜像
rootfs 0x00900000 32MB 根文件系统
userdata 0x02900000 剩余空间 用户数据

为什么会这样分区?因为Flash的读写速度比DDR慢得多。所以启动时,U-Boot会把内核从Flash拷贝到DDR中运行。DDR才是程序真正跑的地方。

注意:分区大小不是随便定的。我曾经因为kernel分区只给了4MB,结果鸿蒙内核编译出来5.2MB,放不进去。最后只能重新分区,浪费了不少时间。建议kernel分区至少留8MB,留点余量。

DDR的地址空间,Hi3516DV300默认从0x80000000开始。这个地址在U-Boot和内核的设备树里都要对应上。移植时最容易出问题的地方就在这里——地址对不上,系统起不来。

3.4 搭建串口与网口环境

好了,理论说完了,咱们动手搭环境。

3.4.1 串口连接

串口是嵌入式开发的「生命线」。系统起不来、内核panic、调试信息,全得靠它。

Hi3516DV300开发板上通常有一个4针的UART接口。接线方式很简单:

  • GND接GND
  • TXD接RXD
  • RXD接TXD
  • VCC一般不接(开发板自供电)

串口参数:115200波特率,8数据位,1停止位,无校验。这个参数在U-Boot和内核里都要设置一致。

我推荐用MobaXterm或者PuTTY。Windows下记得装好USB转串口的驱动。Linux下直接用minicom或者screen就行。

快速验证串口:接好线后,给开发板上电。如果串口终端能看到启动日志,说明连接成功。如果啥都没有,先检查接线,再检查波特率。我遇到过最坑的一次,是线接对了但地线没接,信号飘得乱七八糟。

3.4.2 网口配置

串口搞定了,接下来配网口。网口主要用于文件传输——比如把编译好的鸿蒙镜像通过TFTP或NFS下载到开发板上。

Hi3516DV300的网口是百兆的,用RJ45接口。配置步骤:

  1. 用网线把开发板和电脑连到同一个路由器或交换机
  2. 在U-Boot中设置IP地址:setenv ipaddr 192.168.1.100
  3. 设置服务器IP(你的电脑):setenv serverip 192.168.1.10
  4. 保存环境变量:saveenv

然后就可以用TFTP下载内核了:

tftp 0x82000000 uImage

这条命令的意思是把电脑上的uImage文件下载到开发板DDR的0x82000000地址。为什么是这个地址?因为要避开U-Boot自身占用的空间。

避坑指南:我曾经在配置网口时,发现ping不通。折腾了半天,最后发现是电脑的防火墙把TFTP端口给拦了。关掉防火墙,立竿见影。另外,开发板和电脑的IP必须在同一个网段,这个别搞错了。

3.5 本章小结

这一章我们干了三件事:认识了Hi3516DV300开发板的硬件、看了芯片手册的关键章节、搭好了串口和网口环境。

嗯,说实话,这些准备工作看着琐碎,但真到了移植阶段,你会发现每一步都省不了。尤其是串口,没有它你连系统为什么起不来都不知道。

下一章,咱们开始搭建鸿蒙系统的编译环境。到时候你会用到今天配好的串口和网口,所以务必确保它们都能正常工作。

有问题随时翻芯片手册,别像我当年那样凭感觉乱试。好,今天就到这儿。