完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我似乎很难完成一个简单的 I2C 任务。我想将测量请求发送到霍尼韦尔传感器,以便它读取温度和湿度读数,这需要其数据表中的以下格式:
我一直在为我的测试代码使用以下内容: 当我读取数据时,我已经准备好接收 4 个字节的数组。我将它作为虚拟参数传递给传输函数,但将长度设置为 0,因为我们不需要为测量请求发送任何数据。 这是 I2C 线路上产生的内容。不幸的是,我工作的地方目前只有一个探头,所以我不得不分别读取 SCL 和 SDA 读数: 我将范围跟踪组合成一个图表。一切看起来都很好,直到 ACK 位之后出现一个额外的位并且在该位的开头只有一个尖峰: 就调试代码时收到的内容而言,我得到以下信息: 这实际上看起来是正确的格式,因为前两位是状态位,后两位将被忽略(“无关”位)所以它看起来像是一个有效的数据包,其中包含温度和湿度的最大传感器值(100% 和 125ºC)。 如果我第二次读取数据,我会看到状态位从 00 变为 01,这表明数据过时: 所以看起来 IC 的状态机正在工作并且它知道它正在被读取,但是测量请求数据包无效并且不会触发传感器进行读取? 在电子方面,这里是原理图,I2C 线有 2.2k 上拉,与 Sparkfun 分线板相同: 与我们的电路唯一不同的是,我们在 I2C 总线上还有一个地址为 0x50 的 EEPROM,因此它不会产生干扰。 我已经在 100 和 400 kHz 下尝试了 I2C,并且尝试了上升时间、下降时间和数字滤波器设置的各种设置: 有没有人能帮忙,因为我对此完全不知所措。我已经联系了霍尼韦尔的威廉希尔官方网站 支持,但没有得到他们的回应,所以这真的是我唯一的希望。 |
|
相关推荐
1个回答
|
|
现在已经解决了,是硬件问题!
IC 的逻辑部分很好,但传感器已损坏,因此无法进行测量,因此每个值都返回 0b11111111111111。 在拆焊我们的板载 IC 并连接Sparkfun分线板后,我设法用我的测试代码获得了合理的读数。我们怀疑是 IPA 或助焊剂。 对于与此传感器(或类似传感器)接口的任何其他人,最终代码都非常简单。 对于测量请求,我做了类似的事情: HAL_I2C_Master_Transmit_IT(&hi2c2, (0x27 << 1), NULL, 0); 故障仍然存在,但没有引起任何问题。正如 TDK 指出的那样,它发生在 SCL 上升沿之间,因此没有影响。 为了从 IC 读取数据,我添加了一个static uint8_t sensorDataBuff[4] = {0}; 在模块范围级别上调用: HAL_I2C_Master_Receive_IT(&hi2c2, (0x27 << 1), sensorDataBuff, sizeof(sensorDataBuff)); 然后我将HAL_I2C_MasterRxCpltCallback () 添加到我的模块并解析放入 sensorDataBuff 的字节。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2846 浏览 1 评论
3274 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1856 浏览 1 评论
3699 浏览 6 评论
6111 浏览 21 评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
403浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
495浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
323浏览 2评论
使用STM32F407VET6的USB2.0功能,发现ctl后芯片无数据返回,是什么原因可能导致的呢?
241浏览 2评论
用STM32G431开发工程,1.50版本的Package包文件无法输出项目工程
345浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-12 05:21 , Processed in 1.051831 second(s), Total 42, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191