主题中讨论的其他器件:C2000WARE
您好!
我正在使用函数 I2CBusScan() 扫描 I2C 器件 FRAM MB85RC1MT。
我得到的从器件地址是0x52、0x53、0x7C。 但是、根据这个存储器 IC 的技术规格、从器件地址应该是0xA4、0xA6和0xf8。 有一个位移位。
我正在检查规格中的信息是否有任何错误。 同时、我想知道该驱动器是否专门针对该示例而设计、是否需要针对其他 I2C 器件进行调整?
谢谢!
起重机
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我正在使用函数 I2CBusScan() 扫描 I2C 器件 FRAM MB85RC1MT。
我得到的从器件地址是0x52、0x53、0x7C。 但是、根据这个存储器 IC 的技术规格、从器件地址应该是0xA4、0xA6和0xf8。 有一个位移位。
我正在检查规格中的信息是否有任何错误。 同时、我想知道该驱动器是否专门针对该示例而设计、是否需要针对其他 I2C 器件进行调整?
谢谢!
起重机
Crane、您好!
更确切地说、您使用 F28004x 作为控制器、 使用 MB85RC1MT 作为 I2C 协议的目标、因此您提供的地址应该来自 MB85RC1MT、对吧? 您能否提供用于 F28004x 的 I2C 配置?
您使用的 I2CBusScan 函数来自哪里? 我无法将其作为 C2000Ware driverlib 的一部分找到、这是 MB85RC1MT 器件特定的函数吗?
此致、
Omer Amir
您好 Omer、
是的、 我 使用 F28004x 作为控制器、 使用 MB85RC1MT 作为 I2C 协议的目标。 根据该存储器 IC 的规范、从器件地址应为0xA4、0xA6和0xf8。
I2C 配置:
//
// I2CA -> myI2C0 Pinmux
//
GPIO_setPinConfig (GPIO_10_I2CA_SDA);
GPIO_setPadConfig (myI2C0_I2CSDA_GPIO、GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (myI2C0_I2CSDA_GPIO、GPIO_QUAL_异 步);
GPIO_setPinConfig (GPIO_8_I2CA_SCL);
GPIO_setPadConfig (myI2C0_I2CSCL_GPIO、GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (myI2C0_I2CSCL_GPIO、GPIO_QUAL_异 步);
void myI2C0_init(){
I2C_DisableModule (myI2C0_BASE);
I2C_initMaster (myI2C0_BASE、DEVICE_SYSCLK_FREQ、400000、I2C_DUTYCYCLE _33);
I2C_setConfig (myI2C0_BASE、I2C_MASTER_SEND_MODE);
I2C_setSlaveAddress (myI2C0_BASE、13);
I2C_DisableLoopback (myI2C0_BASE);
I2C_setBitCount (myI2C0_BASE、I2C_BITCOUNT_8);
I2C_setDataCount (myI2C0_BASE、1);
I2C_setAddressMode (myI2C0_BASE、I2C_ADDR_MODE_7BITS);
I2C_enableFIFO (myI2C0_BASE);
I2C_setEmulationMode (myI2C0_BASE、I2C_emulation_stop_SCL_low);
I2C_enableModule (myI2C0_BASE);
}
I2CBusScan()不是 C2000Ware driverlib 的一部分,它来自 I2C 、i2c_ex4_EEPROM_POLLING 的 C2000Ware 示例。
谢谢!
起重机
您好 Omer、
谢谢!
只需让您知道、我只使用 i2cLib_FIFO_POLLING 中的函数、主文件中没有任何内容可用于读取和写入 FRAM 器件的 EEPROM。 特别是函数 I2CBusScan(),如果它适用于 FRAM 器件的话。
根据 FRAM 器件的规范、其协议如下:
现在、读取和写入都可以正常工作。 不起作用的是读取器件 ID。 其内容如下:
我不确定其规格中的其他任何内容是否会有所帮助。 只是在此处附加了整个规格、以防万一。
e2e.ti.com/.../MB85RC1MT_5F00_DS501_5F00_00027_5F00_4v0_5F00_E_2D00_2329088.pdf
谢谢!
起重机
您好、Crane、
我 建议获取两个器件之间使用的引脚的输出、以检查其是否符合您的预期规格。 我还建议您使用 I2CBusScan 函数来确保设置与您期望的一致、因为这是 EEPROM 的通用示例的一部分。 FRAM 的地址大小可能不正确、或者作为协议的一部分错误地读取了一个额外的位等 如果您仍然遇到问题或需要帮助通过 I2C 输出进行读取、请告诉我。
此致、
Omer Amir
您好 Omer、
您是指波形、对吧?
此致、
起重机
您好 Omer、
该 FRAM 使用8位从器件地址。 C2000 MCU 使用7位从器件地址。 这会导致问题。
那么、我们如何使用 F280040在 I2C 总线上生成该数据。 此命令用于读取三字节器件 ID。
您是否认为它会这样工作:
1.用 R/W 位0发送从地址0x7C
2.通过发送从地址0x52读取地址0xF9来读取三个字节
如果不是、我们如何实现这一点?
谢谢!
起重机
Crane、您好!
您可以使用自由数据格式(请参阅手册24.3.5.3中的"自由数据格式"部分)。 这允许您发送大量数据字节、其中8位地址可用作包含后续数据字节的第一个项目。 我看到的唯一问题是 FRAM 需要第二个起始位、这需要额外的位来完成。 但是、F28004x 的最大数据字节大小为8位、因此这会带来另一个问题。 您可能只需进行位拆裂操作、以避免不得不解决此问题、尽管这可能需要一些时间进行编程。 我将请另一位专家查看他们的意见、以防我遗漏任何内容。
此致、
Omer Amir
谢谢 Omer!
[引用 userid="515979" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1189851/tms320f280040-q1-i2c-driver-from-example-i2c_ex4_eeprom_polling/4488584 #4488584"]但是、这似乎只是读取器件 ID 时出现的问题、似乎 FRAM 的其他 I2C 命令不会导致任何问题。您的意思是、这是唯一读取器件 ID 的方法、而使用7位寻址格式读取/写入等其他命令不会导致任何问题、对吧?