完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请问有关于使用CH341A I2C 与arduino的资料交换的方法
我将arduino设定为Slave,并设定地址为0x08,使用USBIO_WriteI2C传送字符或是数字都没有问题。 同样的,我还是将arduino设定为Slave, 地址设定0x08,并且设定为收到需求后传送回资讯,但是一直无法收到从arduino的资讯。两边程式的写法如下 Arduino /*********************************************************/ #include void setup() { Wire.begin(8); // join i2c bus with address #8 Wire.onRequest(requestEvent); // register event } void loop() { delay(100); } void requestEvent() { Wire.write("Hello "); // respond with message of 6 bytes } /*********************************************************/ PC /*********************************************************/ UCHAR SendData[1024] = {0};UCHAR ReceiveData[1024] = {0}; SendData[0] = 0x08; SendData[1] = 0x00; USBIO_StreamI2C(DeviceIndex, 2, SendData, 6, ReceiveData);/*********************************************************/ 请各位不吝惜指教,谢谢! |
|
相关推荐
3个回答
|
|
您好,CH341的I2C固定作为主机,是可以使用如上API直接和作为I2C从机的MCU通讯的。USBIO_WriteI2C接口可以成功,则:
BOOL WINAPI USBIO_StreamI2C( // 处理I2C数据流,2线接口,时钟线为SCL引脚,数据线为SDA引脚(准双向I/O),速度约56K字节 ULONG iIndex, // 指定CH341设备序号 ULONG iWriteLength, // 准备写出的数据字节数 PVOID iWriteBuffer, // 指向一个缓冲区,放置准备写出的数据,首字节通常是I2C设备地址及读写方向位 ULONG iReadLength, // 准备读取的数据字节数 PVOID oReadBuffer ); // 指向一个缓冲区,返回后是读入的数据 接口函数中的iWriteBuffer需要和USBIO_WriteI2C的设备地址和单元地址相同。建议Arduino代码加入串口调试,先定位问题出在Arduino的发送还是接收方向。也可以使用USBIO_ReadI2C接口测试单字节接收是否可成功。 |
|
|
|
先谢谢 TECH39的回覆。
我测试使用USBIO_ReadI2C来接收来自于Arduino的单个字节。 收到的值都刚好是Arduino所发送的值的一半。 程式如下: Arduino /*********************************************************/ #include void setup() { Wire.begin(8); // join i2c bus with address #0x08 Wire.onRequest(requestEvent); } void loop() { delay(100); } void requestEvent() { Wire.write(0x10); } /*********************************************************/ PC /*********************************************************/ UCHAR DeviceIndex = 0x00; UCHAR mDataAddr = 0x08; UCHAR ReceiveData[1024] = {0}; USBIO_ReadI2C(DeviceIndex, mDataAddr, 0x00, ReceiveData); //ReceiveData[0] = 0x08; /*********************************************************/ 我使用两个arduino来传递讯息是正常的,我不确定我是否正确的使用USBIO_ReadI2C这个函数,谢谢! 另外,我想要请教一下 PVOID iWriteBuffer, // 指向一个缓冲区,放置准备写出的数据,首字节通常是I2C设备地址及读写方向位, 其中的读写方向的意思和撰写的方法,谢谢! |
|
|
|
您好,USBIO_ReadI2C和USBIO_WriteI2C的使用方法并没有区别,其中接口函数中iDevice的低7位用于指定I2C设备地址,iAddr为数据单元地址,如EEPROM的存储单元偏移地址。以I2C协议7位设备地址为例,I2C协议地址后还会跟1个最低位来表示读写方向位,最低位1表示读,0表示写。USBIO_ReadI2C和USBIO_WriteI2C会自动生成方向位,上述例子,使用0x08地址没有问题。
若使用USB_StreamI2C函数中, iWriteBuffer的首字节需要包含地址+读写方向位,因此当设备地址为0x08时,I2C写首字节应为:0x08 << 1 | 0x00 = 0x10,I2C读首字节应为:0x08 << 1 | 0x01 = 0x11。 此外建议您使用CH341EVT中的库和工程软件,内有各平台完整工程,可直接使用或进行二次开发。 链接地址为:http://www.wch.cn/downloads/CH341EVT_ZIP.html ,可优先使用VC例程,路径:CH341PARVC下的CH341PAR.EXE |
|
|
|
只有小组成员才能发言,加入小组>>
467 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2871 浏览 2 评论
2359 浏览 1 评论
810浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
633浏览 1评论
494浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
358浏览 1评论
632浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 15:55 , Processed in 1.229415 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号