站内搜索
发作品签到
【星火计划】ProtoBlade调试终端
专业版

【星火计划】ProtoBlade调试终端

1.0w
0
0
12

简介

ProtoBlade是一款高集成度、面向开发者的万能接口调试器,基于FPGA可重构平台,集成了JTAG、SPI、I2C、UART、逻辑分析仪、传感器接口等数十种调试功能,是电子工程师的理想开发工具。

简介:ProtoBlade是一款高集成度、面向开发者的万能接口调试器,基于FPGA可重构平台,集成了JTAG、SPI、I2C、UART、逻辑分析仪、传感器接口等数十种调试功能,是电子工程师的理想开发工具。
星火计划2025
复刻成本:365.93

开源协议

GPL 3.0

创建时间:2025-06-23 15:51:20更新时间:2025-11-21 20:48:01

描述

ProtoBlade

image.png

先看视频:

全功能多协议调试工具
『⚡ 全功能多协议调试工具!🛠️ 开发者必备的接口分析平台 🔍』

项目简介

ProtoBlade 是一款高集成度、面向开发者的嵌入式协议调试与接口分析平台,采用 MCU 与 FPGA 协同架构,具备协议逻辑可定制、USB 高速传输、IO 多电平支持与多协议复用等关键能力。项目以开源工具链为基础,支持通过软件动态加载协议模块,无需重新烧录固件,即可灵活切换功能,实现“即插即用”的多协议调试体验。

通过标准接口映射和模块化固件设计,ProtoBlade 能够快速适配多种数字通信协议,包括 SPI、I2C、UART、JTAG、SWD、GPIO、PWM、MIDI、I2S 等主流接口,并支持协议之间的动态切换与多任务复用。其开放的硬件设计与上位机控制界面相结合,不仅为嵌入式开发提供高效的调试通道,也为逆向分析和故障测试等复杂任务提供低门槛、高自由度的硬件支持。

项目功能

ProtoBlade 的定位为开发者手中的“协议调试军刀”,同时兼顾性能、保护与灵活性,可广泛应用于硬件调试、原型验证、通信逆向、固件烧录、数据采集、接口注入、协议转换、教学实验等多个技术场景,是嵌入式系统开发、电子设计工程和硬件安全研究的重要辅助工具。

项目参数

模块分类元器件型号名称/功能作用说明电气特性设计备注
主控 MCUCY7C68013AUSB 转 FIFO 控制器提供 USB 2.0 高速通信接口,负责数据通道控制与设备枚举支持 USB 2.0 高速(480Mbps)内部包含 8051 内核,可烧录固件
FPGA 主芯片iCE40HX8K可编程逻辑器件处理所有协议解析与自定义逻辑,支持 SPI/I2C/UART 等协议模块运行8K LUTs,开放工具链(IceStorm)使用 SPI Flash 加载 bitstream
电平转换TXS0108E8 通道电平转换器实现任意方向、任意电压(1.2V–5V)之间的IO兼容支持双向自动感应,支持热插拔所有协议 IO 经过转换后再输出
电源管理TPS621603.3V 降压稳压器提供主逻辑供电(3.3V)输入电压范围宽,效率高可配合 LDO 提供更低电压
电源管理AP632035V DC/DC 降压芯片为高电压输入场景提供 5V 输出3A 输出,适合外围设备供电可实现 Vin 适配器供电场景
存储(FPGA)W25Q32JVSIQSPI Flash存储 FPGA 的 bitstream 文件32Mbit,支持 Quad SPI开机自动加载
存储(MCU)W25Q16JVSIQSPI Flash存储 CY7C68013A 的固件镜像16Mbit,支持标准 SPI用于免固件加载启动
时钟晶振 24MHz系统基准时钟提供 MCU 与 FPGA 所需外部时钟源精度常规为 ±20ppm可替换 TCXO 以提高精度
接口保护TPD3S014USB 端口保护 & 电流限流防止过压/短路,带有过流保护与ESD防护功能集成过流检测引脚可断开 USB 电源输出
IO ESD 保护SP3012-06UTGIO 端口 TVS 管吸收瞬态高电压,防止静电打穿工作电压 5V,响应时间快所有 IO 输出均加保护
指示灯0603 LED状态指示灯显示电源、数据状态、错误提示等多色可选,低功耗软件可控制开关
接口引出PinHeader外设接口排针引出 FPGA 所有 IO,包括 SWD/UART/SPI/GPIO兼容逻辑分析夹 & 焊接排线建议标注接口编号
板间通信GPIO/SWD/UART调试与二次开发接口支持连接外部 MCU 或逻辑模块电平可控可作为外部设备控制端
USB 接口Type-C通信与供电接口提供 5V 输入与 USB 数据通道与 PC 直接通信Type-C 推荐为主接口

原理解析(硬件说明)

  1. 电源与供电系统
    主输入:支持 USB 供电(VBUS)与外部 5V 输入,输入通过 TPD3S014(过压/过流保护芯片)和 FB1(铁氧体磁珠) 过滤噪声,确保主电源轨稳定。
    电源管理:
    +5V:USB 直供
    +3.3V:由 TLV75533PDRVR LDO 从 +5V 降压提供,供给主控逻辑与部分 IO
    +1.2V:由 TLV73312PQDRVRQ1 提供,作为 FPGA 内核工作电压
    VIO 输出(可调 IO 电压):通过 TPS73101DBVR + DAC081C081 构成可编程电压调节电路,DAC 通过 I2C 控制调整反馈电压,实现 0.5V–3.6V IO 电压调节
image.png
  1. 主控系统(FIFO + FPGA)
    CY7C68013A(USB 控制器)
    作为 USB2.0 高速设备,处理 USB 与 FPGA 之间的数据通道
    其 FIFO 接口连接 FPGA,用于大带宽数据交换
    接入外部 24MHz 晶振,支持 USB 时钟工作
    内部 8051 核心可通过 SPI Flash 启动,也支持 I2C Boot
    含若干标志信号(SLRD, SLWR, FLAGx)与同步接口,驱动外部时序
    Lattice iCE40HX8K(FPGA)
    作为主要逻辑处理平台,完成 SPI、I2C、JTAG、SWD 等协议解析与组合控制
    多个电源域:1.2V 核心、3.3V IO、PLL 独立供电
    配有 SPI Flash 存储配置文件,系统上电自动加载
    CDONE / CRESET_B 等信号连接状态检测和复位逻辑
image.png
  1. 电平转换 & IO输出结构
    电平转换芯片:SN74LVC1T45DCKR
    多片组成 8 通道双向电平转换阵列,每路配合方向控制引脚(DIRx)
    支持 1.2V–5.5V 电压域转换,适配多种外设标准
    通过配置可作为输出/输入使用,实际控制由 FPGA 完成
    每路均有串联阻值(33Ω)做阻抗匹配与突波吸收
    电压控制:
    IO 电压 VIO 由 DAC + LDO 构成闭环调节系统,输出电压通过 DAC 控制反馈脚动态设定
    可实现动态切换不同逻辑电平,以适配目标设备
image.png
  1. 接口保护
    USB端口保护:使用 TPD3S014 芯片,集成过压/限流控制,可在短路时自动断电
    TVS阵列(如 SP3012-06UTG):用于静电保护与外部干扰抑制,保护 IO 接口和 LVDS 接头
    二极管 BAT54CW / SD36:在电源、ESD 敏感位置起钳位与隔离作用
image.png
image.png
  1. 电源监控 & 数模控制
    INA233:I2C 总线电源监测芯片,可实时测量 VBUS 电流、电压,用于系统功耗反馈或报警控制
    DAC081C081:低功耗单通道 DAC,通过 I2C 控制可调 IO 电压
    PCA6408A:I2C IO 扩展器,用于控制状态灯、电源开关、功能模块电平等
image.png
image.png
  1. 状态指示
    多颗 LED 状态灯(0603贴片,含白/红/蓝/绿),对应功能:
    CY_READY(USB主控就绪)
    FPGA_READY(FPGA配置完成)
    ERR_LED(出错指示)
    ACT_LED(活动状态)
    通过 IO 控制,反映系统工作状态,支持Cli同步显示
Image 1 Image 2
  1. 测试点与调试接口
    TP 分布于关键信号线上,方便示波器或逻辑分析仪探测
    接口引出使用标准插针,支持 SWD / UART / GPIO 等扩展模块连接
    RESET 按钮 + 上电检测电路:实现外部手动复位、上电复位延迟、电源掉电检测功能,增强稳定性
image.png
Image 1 Image 2
  1. 扩展 & 高速接口模块
    LVDS IO阵列:用于高速串行信号交互(如 JTAG、I2S、MIPI 等),具备对称差分设计
    LVDS 接头带屏蔽设计,并附 ESD 保护与终端匹配说明
    可根据 FPGA Bitstream 更换协议支持(如用于逻辑分析、时序捕获、ADC前端等)
    后续可能会出扩展模块 OwO..此处先留坑
image.png

注意事项

  • 下单推荐勾选阻抗100Ω工艺
  • 虽然各个接口都增加了相关防护措施,但仍然禁止上电时热插拔和手动触摸引脚
  • 严禁短路使用(这里我指的是IO配置短路)我当然知道你们不会用它点燃烟花电路玩啦(#^.^#)
  • 带有 (Preview) 尾缀的功能属于预览版测试阶段,可能存在严重的不稳定性。请勿在真实硬件上轻易使用这些功能,否则可能会造成硬件永久损坏。 使用这些功能所带来的风险,完全由使用者自行承担。
  • 再次强调:VIO接口支持电平最高为5V 不要超压使用(使用不支持5V电平的操作 如:操作RS232协议的功能,必须额外添加电平转换电路) 错误使用这些功能所带来的后果,完全由使用者自行承担。
  • 想到什么再补充吧

组装流程

如按复刻成本中的3D打印方案需要下单前先手动编辑文件给壳盖打几个透光孔

我找了一圈实在是找不到这种紧凑的立式导光柱 so.透明探索版外壳YYDS (#^.^#)

我贴片时选的按键按钮有点长,按键部分按需选择(过长会导致装配时出现小麻烦)

欢迎大佬评论区交流装配经验

板子收到后实物是这样的:↓(人工掰去工艺边即可)不要大力出奇迹

image.png
Image 1 Image 2

由于创子的铝壳找不到合适的公模壳子,这次的外壳采用透明打印+亚克力面板的组合方式:↓

Image 1 Image 2

将面板对齐外壳顶盖直接粘上去就行了(我选的防水背胶款,透明度有点不透明)

装入PCB的时候需要注意:先装按键和Type-C部分,然后按下去就好了(不要大力出奇迹)

另外的另外:四个固定脚如果不能严丝合缝需要手工剪去俩(推荐剪去靠近Type-C的那俩)不要一次性剪到位,最后还要对角拧螺丝

成品颜值棒棒哒:

image.png

软件说明

:当前此软件运行方式仅为Windows端Cli(上手会有一定使用难度)
同时,如果想得到更深入使用体验需要学习一下oss-cad-suite这套工具和MSYS2Gtkwave软件
软件会分发两个版本,小尺寸适合run,文件小,速度快;大尺寸为全功能程序,里面打包了FPGA工具链相关内容,可以执行build命令(具体玩法大家可以自行挖掘)

软件下载链接

目前的使用流程

  1. 大前提: 电脑中需要配置好oss-cad-suite环境,系统变量中这两个环境置顶:(lib先bin后):oss-cad-suite\liboss-cad-suite\bin。(路径为本地真实路径即可)
  2. 新建环境变量ProtoBlade_TOOLCHAINsystem
  3. 在上方链接中下载编译好的exe文件和附件的bin固件包(具体引脚定义参考各功能帮助菜单中的说明)
  4. 将exe文件放入电脑系统环境变量中(后续将使用命令行工具进行操作)
  5. 推荐在使用的电脑中安装完整MSYS2环境
  6. 通过MSYS2安装Gtkwave软件(Windows下FPGA辅助开发利器)后续所有VCD操作可以使用它来进行
  7. OSS自带的几款工具可以完美适配ProtoBlade硬件,用来当Windows下完整开源FPGA工具链的各种实用开发工具使用

初次使用的驱动安装和固件烧录

Windows 电脑上,第一次使用 ProtoBlade(或类似 FX2/ProtoBlade 设备)时,通常需要用 Zadig 工具安装/替换 USB 驱动,以便烧录和通信工具能正常识别设备。下面是详细步骤和常见问题解答:

驱动安装(每台电脑首次必须操作)如果更换了电脑,需要在新电脑上重复以下 Zadig 配置流程。

  1. 附件中下载 Zadig 软件,也可以去官网
  2. 管理员模式运行 Zadig
  3. 插入板卡(进入 bootloader 或正常模式均可)
  • 建议首次插入时让板卡处于 Cypress bootloader 状态(lsusb -d 04b4:8613 会显示对应的设备)。
  1. Zadig 界面顶部的下拉菜单中,选择你的设备。如果没看到设备,点击“Options”菜单,勾选“List All Devices”。
  • 一般显示为:Cypress FX2LPVID:PID04b4:8613
  1. 右侧下拉框选择驱动类型,推荐选择 libusb-win32WinUSB 驱动(一般建议 WinUSB,兼容性好)。
  2. 点击“Replace Driver”或“Install Driver”。等待进度条完成,出现“成功”提示即可。
image.png
image.png
image.png
image.png

出厂化

  1. 附件下载protoblade.ihex文件,放到ProtoBlade.exe同路径下
  2. 插上USB
  3. 进入 Cypress bootloader 状态(全新芯片一般插上即可)
  4. 运行lsusb -d 04b4:8613查看状态
  5. 运行ProtoBlade factory
  6. 程序会自动重启,此处建议手动重启(拔线重插)
  7. 使用flash命令烧录固件(此步见下方操作)
  8. 如果一切正常无报错就可以愉快使用了(#^.^#)
image.png
image.png
image.png

烧录固件

下载最新版本的固件,然后运行ProtoBlade flash --firmware protoblade.ihex即可。

image.png
image.png

运行Cli:命令解释

根据运行环境自行参考启动命令:ProtoBlade.\ProtoBlade.exe
输入:-h命令可以查看帮助文档
输入:test [协议]可以启动本地虚拟协议测试功能,会在exe同路径下生成测试VCD文件(通常测试结果都是OK,VCD文件中的波形使用Gtkwave查看都是0,直线)(这步可以用来验证MSYS2Gtkwave的安装结果)
输入:run [协议]可以写入固件到硬件,需要执行什么样的协议就run什么固件即可(支持添加--upload--load附加参数,前者会写入Flash内部,后者只是临时加载)
可以使用flash --remove-bitstream命令对Flash中已有的小程序做彻底清理功能(Reset后自动恢复出厂状态)
输入:run --help查看当前硬件支持的所有测试协议(目前支持62种测试功能,相关bin文件在固件压缩包中完整显示)
使用全功能程序支持自定义固件生成,可以凭心情随意改变引脚定义(相应的环境必须配齐)

功能验证相关示例

成功经受住了上述操作的“摧残”后,那么恭喜你,现在离成功只有一步之遥了,接下来我们还需要对硬件进行自检以及对相关功能进行检测。(此处只列举几个简单的例程,完整功能见下方表格)

硬件自检

功能框图

自检程序框图.png

硬件自检一共分为三项

  1. 点灯,验证板子上的12个灯是否工作正常
  2. I/O回环测试,利用A/B信号的特性来检测所有IO是否正常工作
  3. 板载功能电路检测,主要是检测设备的ADC、DAC、LDO工作状态

点灯

命令: ProtoBlade run selftest leds

点灯.png

效果: 12个灯呈现流水灯效果即正常

系统引脚回环测试

命令: ProtoBlade run selftest pins-loop

  • A0-A7B0-B7连接
系统引脚回环测试接线图.png
系统引脚回环测试结果.png

效果: 如上图,显示PASS即正常

板载功能电路检测

命令: ProtoBlade run selftest voltage

  • A-VSA-VIO连接、B-VSB-VIO连接
板载功能电路检测接线图.png
板载功能电路检测结果.png

效果: 如上图,显示PASS即正常

GPIO点灯

功能框图

GPIO点灯程序框图.png

命令:
ProtoBlade run control-gpio --pins A0 -V 3.3 A0=1 开启LED
ProtoBlade run control-gpio --pins A0 -V 3.3 A0=0 关闭LED
ProtoBlade run control-gpio --pins A0 -V 3.3 A0 引脚电平检测

GPIO点灯接线图.png
GPIO点灯结果.png

此处必须接电阻

效果: 如上图,LED实现命令控制开启关闭以及引脚采集电平显示正确即正常

GPIO模拟PWM波形输出

功能框图

GPIO模拟PWM波形输出程序框图.png

命令:
python .\gpio_pwm_repl.py

#!/usr/bin/env python3
## -*- coding: utf-8 -*-
"""
Direct PWM Generator for ProtoBlade
Uses direct GPIO control for maximum efficiency
"""

import asyncio
import time


class DirectPWMController:
    """Direct PWM controller using minimal overhead"""
    
    def __init__(self, iface, pin=0):
        self.iface = iface
        self.pin = pin
        self.running = False
        
    async def setup(self):
        """Setup pin as output"""
        await self.iface.output(self.pin, False)
        print(f"Pin {self.pin} configured as output")
        
    async def generate_direct_pwm(self, freq, duty, duration=None, cycles=None):
        """
        Generate PWM with direct control
        
        Args:
            freq: Target frequency in Hz
            duty: Duty cycle (0.0-1.0)
            duration: Duration in seconds (None for infinite)
            cycles: Number of cycles (None for infinite)
        """
        if not 0.0 <= duty <= 1.0:
            raise ValueError("Duty cycle must be 0.0-1.0")
        if freq <= 0:
            raise ValueError("Frequency must be positive")
            
        # Calculate timing
        period = 1.0 / freq
        high_time = period * duty
        low_time = period * (1 - duty)
        
        print(f"Target: {freq}Hz, {duty:.1%} duty")
        print(f"Period: {period*1000:.3f}ms, High: {high_time*1000:.3f}ms, Low: {low_time*1000:.3f}ms")
        
        self.running = True
        start_time = time.time()
        cycle_count = 0
        
        try:
            while self.running:
                if duration and (time.time() - start_time) >= duration:
                    break
                if cycles and cycle_count >= cycles:
                    break
                    
                # High level
                await self.iface.set(self.pin, True)
                await asyncio.sleep(high_time)
                
                # Low level
                await self.iface.set(self.pin, False)
                await asyncio.sleep(low_time)
                
                cycle_count += 1
                
        except KeyboardInterrupt:
            print("\nInterrupted by user")
        finally:
            self.running = False
            await self.iface.set(self.pin, False)
            duration = time.time() - start_time
            actual_freq = cycle_count / duration if duration > 0 else 0
            print(f"Generated {cycle_count} cycles in {duration:.2f}s")
            print(f"Actual frequency: {actual_freq:.1f}Hz")
            print(f"Error: {abs(actual_freq - freq) / freq * 100:.1f}%")


## Global controller
direct_pwm = None


async def init_direct_pwm(iface, pin=0):
    """Initialize direct PWM controller"""
    global direct_pwm
    direct_pwm = DirectPWMController(iface, pin)
    await direct_pwm.setup()
    return direct_pwm


async def direct_1khz(duty=0.5, duration=10):
    """Generate 1kHz PWM using direct method"""
    if not direct_pwm:
        print("PWM not initialized. Run init_direct_pwm(gpio_iface) first")
        return
    await direct_pwm.generate_direct_pwm(1000, duty, duration)


async def direct_custom(freq, duty=0.5, duration=10):
    """Generate custom frequency PWM using direct method"""
    if not direct_pwm:
        print("PWM not initialized. Run init_direct_pwm(gpio_iface) first")
        return
    await direct_pwm.generate_direct_pwm(freq, duty, duration)


## Test different frequencies to find the limit
async def test_frequency_limits():
    """Test different frequencies to find the practical limit"""
    if not direct_pwm:
        await init_direct_pwm(gpio_iface)
    
    test_frequencies = [20]
    duty = 0.5
    test_duration = 3  # 3 seconds per test
    
    print("=== Frequency Limit Test ===")
    print("Testing different frequencies to find practical limit...")
    
    for freq in test_frequencies:
        print(f"\nTesting {freq}Hz...")
        start_time = time.time()
        
        await direct_pwm.generate_direct_pwm(freq, duty, test_duration)
        
        duration = time.time() - start_time
        print(f"Test completed in {duration:.2f}s")


## Quick test
async def quick_direct_test():
    """Quick test with direct method"""
    print("=== Quick Direct PWM Test ===")
    
    await init_direct_pwm(gpio_iface)
    await direct_1khz(0.5, 5)


if __name__ == "__main__":
    print("Direct PWM Generator for ProtoBlade")
    print("Usage:")
    print("1. Initialize: await init_direct_pwm(gpio_iface)")
    print("2. 1kHz test: await direct_1khz()")
    print("3. Custom freq: await direct_custom(500, 0.25, 5)")
    print("4. Frequency test: await test_frequency_limits()")
    print("5. Quick test: await quick_direct_test()") 

GPIO模拟PWM波形测试报告1 GPIO模拟PWM波形测试报告2
GPIO模拟PWM波形测试报告3 GPIO模拟PWM波形测试报告4

效果: 此示例图片整合了,效果和相关测试结果如上四图,运行无报错且PWM显示当前输出的频率即正常

GPIO回环测试

功能框图

GPIO回环测试程序框图.png

命令:
ProtoBlade run control-gpio A0=0 A1=0 A1 --pins A0,A1 -V 3.3 A1=0,A0检测A1
ProtoBlade run control-gpio A0=0 A1=1 A1 --pins A0,A1 -V 3.3 A1=1,A0检测A1

(A0与A1短接)

GPIO回环测试结果.png

效果: 如上图,回调显示对应高低电平即正常

UART回环测试

功能框图

UART回环测试程序框图.png

命令:
ProtoBlade run uart --tx A1 --rx A0 -V 3.3 -b 115200 tty

(A0与A1短接)

UART回环测试结果.png

效果: 如上图,输入内容=相应内容即正常

I2C回环测试

功能框图

I2C回环测试程序框图.png

命令:
protoblade run i2c-initiator --scl A0 --sda A1 --pulls -b 100 -V 3.3 scan

(A0与A1短接)

I2C回环测试结果.png

效果: 如上图,无报错即正常(此处如果有I2C设备可以继续深入实现双机效果)

SPI回环测试

功能框图

SPI回环测试程序框图.png

命令:
protoblade run spi-controller --sck A0 --cs A3 --copi A1 --cipo A2 -f 100 -V 3.3 01 02 03 04

(A1与A2短接)

SPI回环测试结果.png

效果: 如上图,输出与命令内容一样即正常

Analyzer数字采样逻辑分析仪

功能框图

Analyzer数字采样逻辑分析仪程序框图.png

命令:
protoblade run analyzer --i A0 -V 3.3 --stream-vcd wave.vcd

(A0与对应GND接入函数发生器)

Analyzer数字采样逻辑分析仪接线图.png
Analyzer数字采样逻辑分析仪测试命令.png
Analyzer数字采样逻辑分析仪测试结果.png

注意: 此处函数发生器波形最大电压3.3V

此处实验方案:方波1500Hz 占空比50% 幅值2.6V

此工具只能采集方波、脉冲、时钟、数字通信信号(如SPI、I2C、UART等)

模拟信号采集目前的方案更偏向于启用LVDS接口+外置模块

效果: 如上图,Ctrl+C结束采集,用GTKWave查看波形结果为方波即正常

舵机控制

功能框图

舵机控制程序框图.png

命令:
protoblade repl control-servo --out A0 -V 3.3 进入舵机REPL控制模式
await servo_iface.enable(True) 信号开启使能
await servo_iface.disable() 信号关闭使能
await servo_iface.set_value(1500) 停止转动
await servo_iface.set_value(1300)
await servo_iface.set_value(1700)
最后两个命令是改变舵机旋转方向的命令(数值不同方向和速度都会不同)

(A0接入舵机脉冲信号,舵机单独外部5V供电,此环境下供电、舵机负、设备负共地操作

舵机控制接线图.png
舵机控制命令.png

注意: 舵机5V需要外部单独供电,并且硬件需完全共地

效果: 如上图,命令返回None且舵机跟随相应命令转动即正常

DAC播放音频

功能框图

DAC音频程序框图

命令: 此处以使用sox命令进行文件转换

  1. 使用MSYS2安装sox工具pacman -S mingw-w64-x86_64-sox
  2. 使用SOX进行转换sox output.wav -c 1 -r 48000 -b 16 -e signed-integer output.s16 vol 0.9
  • 使用FFmpeg进行转换(没试过,自行测试)
  • 使用Python进行转换(没试过,自行测试)
音频DAC接线.png
音频转换.png

注意: ① 音频信号必须接RC电路后再接入功放 ② 功放供电要足够充足 ③ 功放声音调到最小在启动命令,慢慢调大 ④ProtoBladeVIOVS引脚必须相连,运行时这步未连接也会提示报错

!!!时刻保持I/O端口电压不超过3.3V!!!

此处留坑(应该就差外放了)我这没有额外运放模块,最后的增益没法做,导致波形只有0.2vpp;结果就是能看到,听不到。

手动扫描s16文件的数据

s16数据.png

示波器抓取的音频波形(此处没Auto,只是为了展示频率)

1 2
3 4

其他玩法自行探索:

使用单声道输出
protoblade run audio-dac --o A0 -r 48000 -w 2 -s play output.s16
使用立体声输出
protoblade run audio-dac --o A0,A1 -r 48000 -w 2 -s play output.s16

效果: 如上图,运行命令不报错,使用示波器能看到实时音频波形且喇叭正常出声即正常(需要单独加运放电路)

FPGA综合(进阶功能)

功能框图

FPGA综合程序框图

命令: 此处以UART为例
protoblade build -t rtlil -f uart.il uart
yosys -p "synth_ice40 -json uart.json" uart.il
nextpnr-ice40 --hx8k --package bg121 --json uart.json --pcf top.pcf --asc top.asc
nextpnr-ice40 --gui --hx8k --package bg121 --json uart.json --pcf top.pcf --asc top.asc

FPGA综合.png

效果: 如上图,使用nextpnr能查看到综合结果即正常

分发固件(功能)汇总

分发固件(功能)汇总.png

以下为功能更新内容

  1. 优化analyzer数字采样逻辑分析仪支持连续采集与实时监测
  2. 新增lvds-signal-generator功能;同步新增lvds-signal-generator差分缓冲模块项目(开始鸽了)
  3. 新增GPIB设备通信功能
  4. 新增CAN控制器功能
  5. 新增开环FOC控制功能
  6. 新增RS232/RS422/RS485通信功能
  7. 新增Modbus协议通信功能
  8. 新增曼彻斯特编码通信功能
  9. 新增SRAM内存读取功能
  10. 新增FIR-IIR滤波器功能
  11. 新增上位机(开发成本有点高,要往后鸽了)已经不知道这是鸽的第几个内容了 o(╥﹏╥)o
analyzer数字采样逻辑分析仪支持连续采集与实时监测.png
Image 1 Image 2
开环FOC功能
Image 1 Image 2
Image 1 Image 2
Image 3 Image 4
配套上位机

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
ProtoBlade差分信号对布线长度检测报告.pdf
26
2
Test_Bin.rar
17
3
zadig-2.9.rar
27
4
protoblade_固件_v1.0.0.rar
23
5
GPIO-PWM极限测试报告.pdf
13
6
ProtoBlade详细功能参数.pdf
24
7
gpio_pwm_repl.py
17
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航