[求助]怎么在线读写EEPROM?

1. 想在线读写24C04芯片,A1,A2接高电平,CH341EVT这个源代码例程看过了,用里面的EEPROM配置那个选项卡里可以读写(用的CH341ReadI2C和CH341writeI2C函数,24C04的设备地址设成52可以读写),但是只能一个地址一个地址的读写,而且最大地址不能超过FFH。

2.CH341ReadEEPROM函数无法设置24C04的芯片物理地址,无法使用。

3.而CH341StreamI2C看似好像可以设置24C04的物理地址,但是例程里面没有设置的地方,源程序例程里函数调用如下: CH341StreamI2C (p_Dlg->mIndex, mwlen, &wbuffer[0], mrlen, &rbuffer[0] )

应该是&wbuffer[0]的第一字节是设备地址,但是看不懂它怎么调用的。

本人菜鸟,综上所述,希望高手给指教一下,用什么函数进行带设备地址的芯片的在线读写,具体方法是怎样的,不胜感激!!!

我建议您直接使用CH341ReadEEPROM和CH341WriteEEPROM来实现EEPEOM的的读写! BOOL WINAPI CH341ReadEEPROM( // 从EEPROM中读取数据块,速度约56K字节 ULONG iIndex, // 指定CH341设备序号 EEPROM_TYPE iEepromID, // 指定EEPROM型号 ULONG iAddr, // 指定数据单元的地址 ULONG iLength, // 准备读取的数据字节数 PUCHAR oBuffer ); // 指向一个缓冲区,返回后是读入的数据

BOOL WINAPI CH341WriteEEPROM( // 向EEPROM中写入数据块 ULONG iIndex, // 指定CH341设备序号 EEPROM_TYPE iEepromID, // 指定EEPROM型号 ULONG iAddr, // 指定数据单元的地址 ULONG iLength, // 准备写出的数据字节数 PUCHAR iBuffer ); // 指向一个缓冲区,放置准备写出的数据 下面说明一个函数参数 ULONG iIndex // 指定CH341设备序号,支持多个CH341设备同时工作,如果只使用一个CH341设备iIndex = 0 EEPROM_TYPE iEepromID, // 指定EEPROM型号,要操作EEPROM的型号,支持ID_24C01,ID_24C02, ID_24C04,ID_24C08,ID_24C16,ID_24C32,ID_24C64,ID_24C128,ID_24C256,ID_24C512,ID_24C1024,ID_24C2048,ID_24C4096 ULONG iAddr, // 指定数据单元的地址,如果同时操作8片24c02,8片24c02的A2,A1,A0分别是 第1片24c02 A2 A1 A0 = 0 0 0 第2片24c02 A2 A1 A0 = 0 0 1 第3片24c02 A2 A1 A0 = 0 1 0 第4片24c02 A2 A1 A0 = 0 1 1 第5片24c02 A2 A1 A0 = 1 0 0 第6片24c02 A2 A1 A0 = 1 0 1 第7片24c02 A2 A1 A0 = 1 1 0 第8片24c02 A2 A1 A0 = 1 1 1 0 = GND 接地 1 = VCC 接电源 如果要操作第1片24c02,那么该地址应该就是0x100 * 0x00 + 单元地址 如果要操作第2片24c02,那么该地址应该就是0x100 * 0x01 + 单元地址 如果要操作第3片24c02,那么该地址应该就是0x100 * 0x02 + 单元地址 ... 如果要操作第n片24c02,那么该地址应该就是0x100 * n + 单元地址 n <= 8 24c02有256个字节,所以是0x100

ULONG iLength, // 准备读/写的数据字节数 PUCHAR iBuffer // 指向一个缓冲区,放置准备写出的数据/存放读到的数据

如果还有问题,请直接拨打025-52638363


多谢指教,比说明书详细,刚试了一下,成功读取数据了,太感谢了。

唯一有一点不明白,我的硬件明明是A0接的10K上拉电阻到电源,A1,A2直接接电源,但是我用0x200 * 0x06或0x200 * 0x07都读不出来,用0x200 * 0x01读出来了。


24c04只使用A2和A1,A0不使用,也就是说最多支持4片24c04芯片 A2 A1 A0 0 0 x 0 1 x 1 0 x 1 1 x 0x200 * 0对应第1片24c04 0x200 * 1对应第2片24c04 0x200 * 2对应第3片24c04 0x200 * 3对应第4片24c04

你访问0x200 * 6和0x200 * 7地址当然不行了,请查看芯片手册! 一定要好好看芯片手册!


多谢,程序我已经编好了,我的24C04地址是11,选择3可以编程,以前选1那个是我拆过有焊上去时一个引脚没焊接牢靠所以地址成1了,现在用地址3读写很正常,多谢了,解决大问题了。


示例都是与24C系列通信的,与HUSB-238通信,写入报错(实际可以写入),读取正常,API函数做了什么限制?


只有登录才能回复,可以选择微信账号登录