FPGA设计实例——基于FPGA的蓝牙通信实验_EGo1开发板上实现

FPGA设计实例——基于FPGA的蓝牙通信实验_EGo1开发板上实现

一、概述

本实验基于依元素科技有限公司的《蓝牙通信》实验进行改进,通过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

在手机端安装蓝牙调试软件,本人使用的是“e调试”软件,如图4所示。

图4 蓝牙调试软件

3.4 查询/设置蓝牙模块的参数

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

图5 查询/设置蓝牙模块参数的FPGA代码

拨动拨码开关对蓝牙进行复位,然后在电脑端打开串口调试助手,输入AT,返回OK;输入AT+NAME,查询名字,返回+NAME=<luoxing EGo1>;输入AT+NAME<my EGo1>,修改名字,返回+NAME=<my EGo1> 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 开发板的设置

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

图9 使用e调试软件建立与EGo1开发板的连接

在手机端输入*NF151,如图10所示,现象如图11所示,可以看出,LED灯的最右边为高位,最左边为低位,从右往左的亮灭分别为1111_0001_0101_0001,1代表点亮,0代表熄灭,与*NF151的设置一致。

图10 控制LED灯指令下发

图11 LED灯控制效果

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

图12 控制数码管指令下发

图13 数码管控制效果

五、工程获取方法

点击链接:https://t.zsxq.com/ZaLiZ,加入知识星球——FPGA设计入门与提高,获取工程源码。

目前知识星球包括的优质FPGA工程如下:

【2-FPGA视频图像处理】_1_Sobel边缘检测

【3-FPGA数字信号处理】_1_DDS信号发生器

【3-FPGA数字信号处理】_2_CORDIC旋转模式实现sin和cos运算

【3-FPGA数字信号处理】_3_CORDIC向量模式实现arctan运算

【3-FPGA数字信号处理】_5_基于FPGA的CORDIC旋转模式实现sin和cos运算

【5-FPGA设计实例】_1_IIC OLED字符显示

【5-FPGA设计实例】_2_OLED 数字时钟

【5-FPGA设计实例】_3_DS18B20温度检测,OLED显示

【5-FPGA设计实例】_4_蓝牙通信_EGo1开发板

【5-FPGA设计实例】_5_超声波测距系统

【5-FPGA设计实例】_6_LCD1602驱动

Read more

OpenCode:开源版Claude Code来了,附Windows客户端

OpenCode:开源版Claude Code来了,附Windows客户端

大家好,我是 Ai 学习的老章 今天给大家介绍一个我最近在用的 AI 编程神器 —— OpenCode。4.6万 Star,500+ 贡献者,每月被 65 万开发者使用。这货基本上就是开源版的 Claude Code,而且完全不绑定任何一家模型提供商! 简介 OpenCode 是一个 100% 开源的 AI 编程智能体,可以在终端、桌面应用或 IDE 里使用。 和 Claude Code 有什么区别?官方自己也说了: * 完全开源:代码全在 GitHub 上,想怎么改就怎么改 * 不绑定模型:Claude、GPT、Gemini、DeepSeek 甚至本地模型都能用,75+ 个 LLM

By Ne0inhk
Github如何上传项目(超详细小白教程)

Github如何上传项目(超详细小白教程)

目录 * 一、Github与Git * 二、git的下载安装 * 三、Github的注册 * 四、Github的上传 * 1.GitHub的上传原理 * 2.远程仓库的申请 * 3.本地仓库的关联 * 4.项目的首次上传 * 5.上传时的常见错误 一、Github与Git 1.Git 是一个免费的开源分布式版本控制系统,你可以使用它来跟踪文件中的更改。你可以在 Git 中处理所有类型的项目。使用 Git,你可以将更改添加到代码中,然后在准备好时提交(或保存)它们。这意味着你还可以返回之前所做的更改。开发者常将 Git 与 GitHub 一起使用。 2.GitHub是一个基于git的代码托管平台,在github上可以建立仓库用于存放项目。GitHub 是一个免费的开源系统,所以我们可以在上面找到有用的资料,也可以保存自己做的一些开源项目,以供别人参考,当然GIthub也提供了付费的私人仓库,以供有人需要将一些不公开的项目放入云端仓库,

By Ne0inhk
用 Rust 构建 Git 提交历史可视化工具

用 Rust 构建 Git 提交历史可视化工具

在软件开发中,版本控制系统的历史记录往往承载着项目的演进脉络。然而,当项目规模扩大、分支增多时,纯文本的 git log 输出很难直观地展现提交之间的复杂关系。今天,我想分享一个用 Rust 构建的轻量级工具 —— git-graph-rs,它能把 Git 仓库的提交历史转换为可视化的图结构,为代码审查、项目复盘和工程决策提供直观的支持。 目录 * 为什么需要可视化? * 技术方案的选择 * 1. 利用系统 Git 命令 * 2. 模块化的 Rust 架构 * 3. 双格式输出策略 * 核心实现解析 * Git 数据获取的艺术 * 图结构的一致性保证 * 合并提交的可视化区分 * 工程化思维体现 * 错误处理的前置化 * 参数设计的克制 * 输出格式的稳定性 * 实际应用场景 * 1. CI/CD 集成 * 2. 代码审查辅助 * 3. 项目文档化

By Ne0inhk
OpenManus开源自主规划智能体解析

OpenManus开源自主规划智能体解析

OpenManus 开源自主规划智能体详解 OpenManus 是一款聚焦“自主任务执行”的开源智能体项目,核心价值在于打破传统智能体对人工干预的依赖,能够自主拆解复杂任务、规划执行路径,并在隔离环境中调用多样化工具完成目标,适用于数据爬取、代码编写、多步骤办公自动化等复杂场景。以下从核心定义、核心架构、实现原理、关键能力、适用场景与优势五个维度展开详解: 一、核心定义:具备“自主决策+工具执行”的开源智能体 OpenManus 的本质是一款以“自主规划”为核心的智能体框架,其核心特征可概括为: * 开源属性:代码完全开放,支持开发者二次定制、扩展功能模块(如新增工具、优化规划逻辑),适配不同行业场景的个性化需求; * 自主执行能力:无需用户拆分任务步骤,仅需输入最终目标(如“爬取某行业TOP10企业近3年营收数据并生成可视化图表”),即可自主完成规划、执行、反馈全流程; * 隔离化工具调用:基于虚拟机环境运行工具操作(如代码执行、网络爬虫),避免本地环境冲突或安全风险,保障任务执行的稳定性与安全性;

By Ne0inhk