完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们正在研究一个项目,我们想用一个CyPress PSOC4 MCU管理VISHY VEML6040 I2C颜色传感器。我们有困难处理结果,我们从传感器得到了什么,所以我开始调试这个问题。起初,我尝试与另一个主机通信,使用逻辑模式生成器在比特敲击模式,传感器工作完美。
然后,从CyPress侧开始分析I2C传输,并注意到MCU的一些奇怪行为。似乎从传感器的字节不是正确的顺序,有时与我的逻辑分析仪结果相比被破坏了。 我尝试用以下C函数来管理传感器(数据速率:100kbpFIFO字节模式:8位,SW:PSOC创建者3.3 +SP2,HW:CY8C4248LQI-BL583CYCKIT-042-BLU-A) UtiT32 Read Curror传感器(UIT32命令){UTIT32结果=0;//来自颜色传感器UTIT32 RESH=0的数据;//数据高字节UTIT32 RESL=0;//数据低字节UIT32 SLaveAddie= 0x10;/ / RGB颜色传感器I2CMYI2CMASTESTESTART(SLAVEADD,1)的地址;//开始转移到地址=0x10+WR I2CMY2I2CMASTErWrEdEnter(命令);//发送命令字节(传感器内部地址)I2CMYI2CMASTESTEnDebug(SLaveAdd,0);/ /发送重启到地址=0x10+RD RESL= I2CMYI2CMASTRADESENTELL字节(1U);/ /读取低字节RESH=I2CMY2CMASTATEDATABLE字节(1U);/ /读取低字节I2CMYI2CMASTESTESTSTOP();//停止传输结果=(RESH & lt;8)+RESL;返回结果;首先,我们发送起始位和从地址,然后设置从属命令寄存器(这是内部地址,选择从传感器读取的颜色级别),然后用地址发送重复启动,最后读取两个字节。奴隶,然后完成传输与停止位。 在深入分析了I2C API之后,我发现,I2CMJi2CMASTESTEntRead API函数在发送起始位后,会产生8个额外的时钟,以及地址字节,如您在附件中所看到的(在调用I2CMJI2CMASTESTEntRead函数后停止该软件)。我猜想这些额外的时钟会导致数据字节的混乱。我花了很多时间阅读CyPress文档和调试API来更好地理解串行通信块的工作原理,但是我无法发现总线传输是如何触发的。我标记了附加的逻辑分析器模式(I2CyTrimeLogLogyPalay.PNG),如何由API指令触发字节传输,而在我看来这并不是很重要。 1。I2CMJI2CMASTESTESTART(SLAVEADD,1); 在这个API函数中,从地址写入到TX缓冲器(I2CMYTXFIFOXWRYRG = SLaveAdvter);然后在I2CYMYCMD寄存器(I2CMYI2CYMSTROMGEGATEATYSTART START;)中设置MyStRADION OND空闲位,这导致生成起始位,并将地址数据写入总线。 2。I2CMJI2CMASTEMWRITE字节(命令); 在这个FuntCon中,TX缓冲器的写入(I2CMYTXYFIFOXWRYRG=THEL字节)开始传输,并导致9个SCL脉冲的时钟发生。 三。I2CMJI2CMASTESTEnDebug(SLaveAdd,0); 首先在I2CYMYCMD寄存器中设置MYSTART位(I2CMY2I2CYMSTROMENGATEATHORATION;)-在总线上没有发生任何事情,然后将地址写入TX缓冲器(I2CMYTXFIFOXWRYRG = SLaveAdvor;),这发出重复的起始位,写入地址字节,之后时钟9个额外脉冲到T。他乘公共汽车… 总而言之,我有两个问题。 1。我想知道,如何在重复启动条件下实现这两个字节的读取。 2。除了PSoC 4 BLE寄存器技术参考手册和PSoC 4 BLE架构技术参考手册,我还能找到更多的信息来让我们自己的API管理SCB外设吗? 谢谢你的回答! I2C传递逻辑分析 31 K VEML6040II2C.Read PNG 8 K |
|
相关推荐
10个回答
|
|
欢迎来到论坛。
当您使用了已定义的y值i2CMyi2cxWrreEx xFelx模式时,读取所有值的相应值将是正确的。对于所需的ACK和NACK,也有相同的常量。使阅读比0x01更容易,并且不隐藏任何错误。 建立自己的外围设备?有关于组件构建的一般概要的“组件作者指南”。 尽管如此,您可以构建自己的API,而不是使用(工作)提供的API。 鲍勃 |
|
|
|
谢谢你的快速回答,鲍伯!我试着使用预定义的常量值,但是,正如我所说的,总线上没有变化:I2CMJI2CMASTESTEntRead函数仍然像以前一样生成额外的时钟脉冲。
|
|
|
|
|
|
|
|
你不会终止最后一个字节红色的传输,它通常被奴隶接受,表示读取完成。
读取的结果可能已设置MSB以指示错误。SeNestTo()、RealByTE()和sEntStutter()返回一个状态来指示错误条件。至少在测试期间,我建议您检查返回的值。 鲍勃 |
|
|
|
ncmza 发表于 2019-10-29 14:53 是的,通常是在最后一个字节之后用NACK关闭传输,当你从I2C存储器读取时,但是这个VISHAY VEML6040传感器设备总是以两个字节长的读序列为例外,最后由主控ACK。我已经附加了数据表,见第5页,图4。 总而言之,它并没有解决调用重新启动函数的奇怪行为,它在将命令字节发送给从机之后,发出9个额外的脉冲。 我将在接下来的几天里检查I2C函数的返回值,然后返回结果。 谢谢, 加博 VEML6040-4.PDF 403.2 K |
|
|
|
|
|
|
|
|
|
|
|
是的,同样如此。
|
|
|
|
离开我的智慧。我建议您直接与CyPress联系:在这个页面的顶部选择“设计支持-&;创建一个支持案例”并询问您的问题。你会得到一个柏树工程师的帮助。留下一个链接到这个线程,所以CyPress会知道你已经尝试了什么。
鲍勃 |
|
|
|
谢谢你的帮助,鲍伯!
|
|
|
|
只有小组成员才能发言,加入小组>>
752个成员聚集在这个小组
加入小组2070 浏览 1 评论
1826 浏览 1 评论
3639 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1761 浏览 6 评论
1513 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
511浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
361浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
410浏览 2评论
357浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 21:20 , Processed in 1.131104 second(s), Total 96, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号