一、概述
本实验基于《蓝牙通信》实验进行改进,通过 AT 指令设置蓝牙模块的名称、查询蓝牙模块的地址等,然后利用 EGo1 开发板上的蓝牙模块与板卡进行串口通信,使用支持蓝牙 4.0 的手机与板卡上的蓝牙模块建立连接,并通过手机 APP 发送命令,控制 FPGA 板卡上的硬件外设。
二、实验原理
蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,EGo1 开发板上板载的蓝牙模块是基于 TI 公司 CC2541 芯片的蓝牙 4.0 模块,具有 256kb 配置空间,遵循 V4.0 BLE 蓝牙规范。
本实验利用板卡上的蓝牙模块与外界支持蓝牙 4.0 标准的设备(如手机)进行交互。该蓝牙模块出厂默认配置为通过串口协议与 FPGA 进行通信,用户无需研究蓝牙相关协议与标准,只需要按照 UART 串口协议来处理发送与接收的数据即可,实验框图如图 1 所示。

图 1 蓝牙通信实验的模块框图
本实验通过串口发送与串口接收模块来完成与蓝牙模块的数据传输,通过命令解析模块及命令响应模块来实现简单的串口命令的解析控制以及命令的执行,FPGA 在接收到蓝牙模块传输进来的串口数据后,会将相应数据以及命令响应通过蓝牙模块发送给与之连接的通信设备,在这个过程中采用 FIFO 来存储我们需要发送的数据。
在这个设计中,我们在串口协议基础上自定义了若干控制命令,以便于在远端设备上可以通过蓝牙对 FPGA 平台上的逻辑、外设以及接口进行控制。
主要包含以下命令:
(1)*Naaaa
(2)*Waaaaaaaa
上述 2 条命令中,星号(*)的作用是命令的起始位,N、W 等大写字母作为命令的名称,小写字母 a 表示任意一个十六进制数。命令 N 后接 4 位十六进制数,即 16bit 数据,用于点亮板卡的 LED 灯,其后接 16bit 数据分别对应板卡上的 16 位 LED 灯;命令 W 后接 8 位十六进制数,即 32bit 数据,用于控制板卡上的七段数码管显示,其后接 32bit 数据分别对应板卡上 8 位七段数码管显示的数值。
三、实验平台搭建
3.1 EGo1 FPGA 开发板
EGo1 开发板的实物如图 2 所示,是 Xilinx Artix-7 FPGA 研发的便携式数模混合基础教学平台,拥有丰富的外设:VGA 接口、音频接口、USB-UART/JTAG 接口、USB 转 PS2 接口、2 个 4 位数码管、16 个 LED 灯、8 个拨码开关、1 个 8 位 DSP 开关、5 个按键、1 个模拟电压输入、1 个 DAC 输出接口、SRAM 存储器、SPI FLASH 存储器、蓝牙模块和 1 个通用扩展接口。
EGo1 开发板板载的 FPGA 芯片型号为 Xilinx Artix-7 系列 XC7A35T-1CSG324,具有 33280 个逻辑单元、41600 个寄存器、1800kb 的 BRAM 和 90 个 DSP 等逻辑资源,可以实现较复杂的数字逻辑设计。

图 2 EGo1 开发板实物图
3.2 蓝牙模块介绍
EGo1 上集成了蓝牙模块(BLE-CC41-A),位于开发板背面,FPGA 通过串口和蓝牙模块进行通信。波特率支持 1200,2400,4800,9600,14400,19200,38400,57600,115200 和 230400bps。串口缺省波特率为 9600bps。该模块支持 AT 命令操作方法。EGo1 开发板上的蓝牙模块原理图如图 3 所示。

图 3 蓝牙模块电路原理图
3.3 蓝牙调试 APP
在手机端安装蓝牙调试软件,如图 4 所示。

图 4 蓝牙调试软件
3.4 查询/设置蓝牙模块的参数
使用 AT 指令查询和设置蓝牙模块的部分参数,为了方便查询和设置,将 EGo1 开发板的 UART 接口与蓝牙模块的 UART 接口交叉连接,代码如图 5 所示。

图 5 查询/设置蓝牙模块参数的 FPGA 代码
拨动拨码开关对蓝牙进行复位,然后在电脑端打开串口调试助手,输入 AT,返回 OK;输入 AT+NAME,查询名字,返回 +NAME=;输入 AT+NAME,修改名字,返回 +NAME= OK,表示修改成功,也可以再次输入 AT+NAME 查看名字;最后输入 AT+LADDR? 查询地址,完成查询/设置蓝牙模块的参数,如图 6 所示。

图 6 查询/设置蓝牙模块的参数
同时,还可以通过 AT 指令查询/设置蓝牙模块的波特率等参数,因为本实验暂不涉及,感兴趣的同学可以查看该蓝牙芯片对应的 AT 指令进行学习。
四、实验验证
使用提供的蓝牙通信工程,工程总结界面如图 7 所示。

图 7 蓝牙通信工程总结页面
将 bit 流文件下载到 FPGA 开发板中,SW1 设置为低,SW0、SW2、SW3、SW4 设置为高,首先波动拨码开关 SW2(即代码中的 sw_pin[2])对蓝牙模块进行复位,此时蓝牙处于 Slave 模式,蓝牙状态指示灯 LED2 闪烁较慢,开发板的拨码开关设置如图 8 所示。

图 8 开发板的设置
在手机上打开蓝牙调试软件,根据蓝牙模块的名字或者地址,正确的与 EGo1 开发板上的蓝牙模块建立连接。前文已将蓝牙模块的名字设置为,并且地址为 04A316AA9C1F,点击进行连接即可,如图 9 所示。

图 9 使用蓝牙调试软件建立与 EGo1 开发板的连接
在手机端输入NF151,如图 10 所示,现象如图 11 所示,可以看出,LED 灯的最右边为高位,最左边为低位,从右往左的亮灭分别为 1111_0001_0101_0001,1 代表点亮,0 代表熄灭,与NF151 的设置一致。

图 10 控制 LED 灯指令下发

图 11 LED 灯控制效果
在手机端输入*W87654321,如图 12 所示,现象如图 13 所示,数码管显示 87654321,与设置一致,实验验证通过。

图 12 控制数码管指令下发

图 13 数码管控制效果


