完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好,是关于HARMony 1.07.01的版本。我发现了。是关于I2C通信功能的内部结构。如果你不在意,有可能产生严重的bug。比如DRV_I2C_Transmitfunction是执行通信的函数。他们将有一个参数指定通信目的地的地址。这个参数是地址7位模式,它将是0xff和内部AND掩码。在地址10位模式中,将是0xffffff并且AND掩码。掩码是执行指定读或写I2C的最低位1位,没有掩码。根据这个问题,例如,当执行DRV_I2C_Transmit函数时,目标地址是0x40,如果指定0x41到t这个地址是DRV_I2C_Transmit函数在I2C总线上错误地发送了一个“address=0x40,Read”的信号。这耗尽了DRV_I2C_Transmit函数的内部缓冲堆栈,它引发一个异常。这是因为最低有效位不会被DRV_I2C_Transmit fu覆盖。连接或类似的.DRV_I2C_Receive函数,实现“OR 1”到地址参数的最低有效位。结果,问题没有实现。然而,我认为如果不是理想的过程。为了避免这些问题,它总是“0”地址的最低有效位(LSB)!从DRVII2C的2229行,从993行DRVIII2C.感谢您阅读这个长消息。
|
|
相关推荐
9个回答
|
|
这些年来,每当我为I2C编写库时,我都会考虑这个问题。但是你的建议可能有意义,耶!
|
|
|
|
同意了!
|
|
|
|
正确的做法是用一个错误的参数错误代码来拒绝呼叫。修正“错误的价值”假设你理解错误。7位I2C地址是7位。左对齐或右对齐不规范。因此,使用奇数的人可能不正确地使用读/写位。或假定有正当理由。“增强”允许不正确的奇怪左对齐值工作。但是正确的右对齐值将使程序员在一个范围内调试。然后通过代码挖掘找出地址被损坏的原因。当然,清晰的文档会有所帮助。
|
|
|
|
NKurzman也有一个观点。这取决于…
|
|
|
|
嗨,谢谢你指出这一点。我们捕捉到这一点,并将其包含在未来发布的手册中。传递到函数中的从地址应该包括R/W位。
|
|
|
|
不,它不应该。大多数I2C从芯片没有这样记录。有单独的读写地址。I2C规范没有那样引用。读写功能知道它们是什么,以及应该如何设置位。记录地址位是右对齐还是左对齐。我假设左边是正当的,因为这是微芯片HW如何处理它。
|
|
|
|
为了澄清我在前面的评论中的意思,传递到DRV_I2C数据传输函数中的从地址值应该包括左移1位的7位从地址,这也占了R/W位的比特空间。填充R/W位的值不是应用程序的责任。驱动函数将根据被调用的传递函数的类型来填充R/W位的适当值。帮助将包括用户必须传递包括R/W的左移位地址(只是位位置而不是值)的“限制”。
|
|
|
|
原文的要点是说读函数迫使R/W位高,但是写函数不迫使R/W位低。
|
|
|
|
我假设这意味着它接受左对齐值,而比特0必须等于零。
|
|
|
|
只有小组成员才能发言,加入小组>>
5160 浏览 9 评论
1998 浏览 8 评论
1927 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3170 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2225 浏览 5 评论
727浏览 1评论
612浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
501浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
626浏览 0评论
524浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:43 , Processed in 1.582928 second(s), Total 92, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号