大佬们好,
我正在用英飞凌在一款带I2C的片子,具体型号是TLE493D-A2B6。
使用CUBEMX生成I2C驱动,使用了所有的驱动函数均无法生成如下图所示芯片手册上时序。
看了函数HAL_I2C_Mem_Read()的介绍,感觉应该可以生成,但是他在函数内部把设备地址的最低位置“0”了,也就是置为了“写”逻辑,然后把后面的寄存器
地址发了出去。而我想要的是在发送设备地址时最低位为“1”,也就是“读”指令,于是我把函数里发设备地址的最低位改为了“1”,用示波器监控,设备地址发送了出去且最低位也变为了“1”,但是无法发出后续的波形。
例如:我发bit:01101011(成功)->ack->00000011(无法发送)//需要的时序
发送bit:01101010(成功)->ack->00000011(成功)//函数原有时序
而用模拟I2C的方式能成功,证明芯片是正常工作的。
所以我想问,是否STM32的I2C在发送地址的时候最低位置"1",也就是读逻辑,之后,硬件无法发送数据给从机了吗?
谢谢。
Hi,
I'musingHAL_I2c_Mem_Read().
AndmayIaskifSTM32'sI2Ccangeneratewavelikethefollowingpicture.IhavetryedMem_read()andanyotherfunctionini2c.c,butthebitfollowingdeviceaddresis"0",whichmeans"write"inI2c.
eg.
Iwanttosendbit.01101011(success)->waitforack,thensend00000011(failed),
butfuctionsendsbit.01101010(success)->waitforack,thensend00000011(success).
Isendbit01101011success,butcan'tsend00000010,
andfuctionsendsbit.01101010success,thenfuctionsends00000011success.
MayIaskStm32'sI2ccansend01101011-ack-00000011ornot?BeceasetheLSBis"0"means"write"forI2Cmaster,andLSBis"1"means"read"forI2Cmaster,sowhenLSBis"1"I2Cmastercan'twritedatatoslave?
Ihavebit-bangandsuccess,butIjustwanttoknowmaystm32'si2chardwarecangeneratetheware,bythewaythechipisinfineon'stle493d-A2B6.
Mayyouhelpmeout,thanks.
分 --> |