cancel
Showing results for 
Search instead for 
Did you mean: 

PSoC 6 MCU

JeHa_3912621
New Contributor II

cypress,您好!

       我在用cy8c6347芯片的时候。 想使用硬件I2C作为主机。 跟一个芯片进行通讯。  我这边首先使用例程CE220818_I2C_Master_Low_Level01.cydsn。 但是我这边用硬件仿真死在了读取部分。 跳转到了pastedImage_0.png

我有参考PSoC6_Interfacing_BMI160(I2C)_FreeRTOS01例子当中的

pastedImage_1.png

程序依然会停止在上图的位置。 我跟踪发现好像是

CY_ASSERT_L2(CY_SCB_IS_I2C_ADDR_VALID  (xferConfig->slaveAddress));

这里出了问题。 我发现这个地址在程序预处理的时候&0x80来判别。 但是我的从机地址是0xA0, 二进制1010 0000 。

#define CY_SCB_IS_I2C_ADDR_VALID(addr)              ( (0U == ((addr) & 0x80U)) )

这个地方过不去。 我查了这个例子,bmi160的从机地址是1101 0000。  也是最高位为1的。

能给一个bim160例子中不跑RTOS的例子吗。 我没有找到这个例子i2c初始化部分。 只看到了读写函数。 谢谢!

0 Likes
1 Solution
ShipingW_81
Moderator
Moderator

我看了下PSoC6_Interfacing_BMI160这个例子,其中从设备bmi160地址 - BMI160_I2C_ADDR 为0x68,PSoC 6的I2C从设备地址是7bit寻址,你的从机地址看上去是8bit,所以导致问题产生。

View solution in original post

0 Likes
4 Replies
JeHa_3912621
New Contributor II

我使用中断方式的I2c例子测试。 调通了。  但是我发现我在调试i2c, spi接口的时候,遇到同样的问题,就是中断方式可以,轮训方式的例子调试不通。

0 Likes
ShipingW_81
Moderator
Moderator

我看了下PSoC6_Interfacing_BMI160这个例子,其中从设备bmi160地址 - BMI160_I2C_ADDR 为0x68,PSoC 6的I2C从设备地址是7bit寻址,你的从机地址看上去是8bit,所以导致问题产生。

View solution in original post

0 Likes
JeHa_3912621
New Contributor II

pastedImage_0.png

pastedImage_1.png

我现在遇到一个问题。 就是我想把P去掉。 箭头所示。  我读取I2c的方式是先写地址, 然后在读。 但是我不知道如何在写+读中间去掉P,因为芯片厂家说如果逻辑不严格,可能会有问题。 我试了我确实遇到了读取数据不对的情况。

0 Likes
ShipingW_81
Moderator
Moderator

你这边是从机接受stop位有出现什么问题吗?是否发送stop位在主机这边是可以选择的,Low Level代码中有专门发送Stop bit的API,如果不需要可以删除,High Level代码中通过API - Cy_SCB_I2C_MasterWrite中参数xferConfig -> xferPending决定是否发送stop bit.

Top labels