QCA4010上手使用

一、概述
从中电港收到一块QCA4010的DEMO板,板子引出很多接口,外设也很丰富,提供8路ADC,8路PWM,3路串口,2路I2C ,2路I2S,2路SPI,RAM 1MB ,ROM 1.25M,相对与QCA400X系列提升了很多,相对与QCA400X系列的透传更适合于hossless使用。
先睹为快,板子外观:
这里写图片描述
这里写图片描述

唯一遗憾的是板子上没有标注管脚排针的丝印,都不知道这些排针所对应的管脚。
二、开发环境搭建
这里要说明一下,QC4010的cad_kf_RD2012_4 的编译工具链在64位系统上用不了,只能在32位的系统上使用,在64位系统上会提示找不到xt-xcc命令找不到。
解压开发工具链cad_kf_RD2012_4.tar.gz到根目录下。把license.dat放在/cad/tensilica/目录下。

编译及下载:
解压SDK包,得到如下文件:
这里写图片描述
修改sdkenv.sh 添加
XTENSA_CORE=KF1_prod_rel_2012_4 XTENSA_TOOLS_ROOT=/cad/tensilica/xtensa/XtDevTools/install/tools/RD-2012.4-linux/XtensaTools
XTENSA_ROOT=/cad/tensilica/chips/kingfisher/RD-2012.4-linux/ XTENSACOREXTENSASYSTEM= {XTENSA_ROOT}/config
LM_LICENSE_FILE=~/xtensa/license.dat
PATH= PATH: {XTENSA_TOOLS_ROOT}/bin
export LM_LICENSE_FILE XTENSA_TOOLS_ROOT XTENSA_ROOT XTENSA_SYSTEM XTENSA_CORE PATH
export XTENSA_PREFER_LICENSE=XT-GENERIC
保存。
设置网卡MAC
sudo ifconfig eth0 down
sudo ifconfig eth0 hw ether 00:0c:29:01:02:03
sudo ifconfig eth0 up

到sdk的目录下,执行
source sdkenv.sh
make -C demo/sdk_shell
这两条指令如果在终端窗口没提示什么错误就表明编译正常。
再执行
cp ./tool/tunable/tunable_input_sp24X_hostless_4bitflash.txt ./tool/tunable/tunable_input.txt
./tool/qonstruct.sh –qons ./tool/tunable/
这两句指令生产可烧录BIN文件

在执行./tool/qonstruct.sh –qons ./tool/tunable/
时可能会提升如下错误:
这里写图片描述
是因为没有安装libxml2这个库,执行如下命令就可以安装libxml2
sudo apt-get install libxml2
sudo apt-get install libxml2-dev
这里写图片描述
其中ota_image_AR401X_REV6_IOT_hostless_unidev_dualband.bin为空中升级文件。
raw_flashimage_AR401X_REV6_IOT_hostless_unidev_dualband.bin为ART烧写文件。
把raw_flashimage_AR401X_REV6_IOT_hostless_unidev_dualband.bin放到ART的bin文件夹下,运行artgui.exe, 将JP4.4与JP5.1短接,运行ART中driver文件夹中的bat文件安装相应的驱动(不同机器不一样)我的是win7 64位的就安装如下文件夹中的:
这里写图片描述
正常安装驱动后如图:
这里写图片描述
AR6006
这里写图片描述
按load card出现Unload card.

Tools -> Send cmd,使用“xp file=xxxxxx”进行烧录.烧录完成如上图所示:4047 INFO Programming done successfully.
接debug UART:J1.6(TX)、J1.8(RX),在Xshell中:

出现乱码,可能是我的USB转串口在高波特率时会出现问题。
三、程序代码分析
Skd shell的代码结构如下:

先从app_start.c开始,qcom_sys_start(user_main, &sysStartPara);
app_start.c中是设置一些环境参数sysStartPara,后进入到user_main函数,usr_main是在sdk_shel.cl中,

User_main中新建了一个线程,shell_host_entry,shell_host_entry函数进入task_execute_cli_cmd();
/* Never returns */
进入到命令解释阶段。
明白了软件大概的启动流程,就可以非常容易的实现自己要实现的功能了。
把task_execute_cli_cmd();替换成自己想要实现的代码,就可以实现自己想要的结果了。
本次分享先写到这里。后续还需要慢慢琢磨如何去实现一些比较实际的应用,如alljoyn等。

猜你喜欢

转载自blog.csdn.net/dengcanjun6/article/details/50061205