根据 FX3 SDK 的 CyUSB.NET 文档,使用 DownloadFw() 方法对 EEPROM 编程的正确步骤如下:
生成固件映像文件:
.c/.h 固件代码编译成 .img 文件硬件连接:
using CyUSB;
public class EEPROMProgrammer
{
public bool ProgramEEPROM(string imgFilePath)
{
try
{
// 查找 FX3 设备
USBDeviceList usbDevices = new USBDeviceList(CyConst.DEVICES_CYUSB);
CyFX3Device fx3Device = null;
foreach (USBDevice dev in usbDevices)
{
if (dev is CyFX3Device && dev.VendorID == 0x04B4) // Cypress VID
{
fx3Device = dev as CyFX3Device;
break;
}
}
if (fx3Device == null)
{
Console.WriteLine("FX3 device not found!");
return false;
}
// 关键参数设置
const int EEPROM_ADDR = 0x50; // I2C 地址
const int I2C_BUS_SPEED = 400; // kHz (标准模式)
// 设置编程参数
fx3Device.SetDownloadAddr(EEPROM_ADDR);
fx3Device.SetI2CConfig(EEPROM_ADDR, I2C_BUS_SPEED);
// 执行固件下载
int status = fx3Device.DownloadFw(imgFilePath, CyConst.FW_DOWNLOAD_MEDIA_TYPE.I2C_EEPROM);
return (status == CyConst.STATUS_SUCCESS);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
return false;
}
}
}权限问题:
错误处理:
if (status != CyConst.STATUS_SUCCESS)
{
Console.WriteLine($"Error code: {status}");
// 常见错误码:
// 0xE0004001 - 无效的媒体类型
// 0xE0004003 - 映像文件校验失败
}映像文件验证:
CyUSBControlCenter 工具预烧录测试.img 文件头是否包含正确的 EEPROM 参数:hexdump -C your_firmware.img | head -n 5I²C 总线监控:
使用示波器或逻辑分析仪抓取 I²C 波形,确认 ACK/NACK 信号
EEPROM 预擦除:
如果遇到编程失败,可先用 fx3prog.exe 工具执行擦除:
fx3prog -t i2c -i your_image.img --erase-only多设备处理:
若连接多个 FX3 设备,需通过 SerialNumber 区分:
if (fx3Device.SerialNumber == "Your_Device_SN")| 方法 | 优点 | 缺点 |
|---|---|---|
DownloadFw() | 官方推荐,操作简单 | 依赖 Cypress 工具链 |
| 直接 I²C 读写 | 灵活控制 | 需手动实现协议栈 |
| Cypress ControlCenter | 图形化操作 | 不适合自动化生产环境 |
建议优先使用 DownloadFw() 方法,因其已处理 EEPROM 的页写入、校验和验证等底层细节。
如果遇到固件启动失败问题,请检查 FX3 的 PMODE 引导引脚配置是否匹配 EEPROM 启动模式(通常需要 PMODE[2:0] = 001)。
举报
更多回帖