STM32H743I-EVAL2_I2C_EEPROM_fast_mode_plus

前言

看I2Cdemo之前,想起下游厂商的板子,用的都是GPIO模拟的I2C. 先去查下资料,看看为啥不用硬件I2C.
资料上说,用硬件I2C,优先级必须高,最好用DMA操作I2C, 否则可能时序不对.

看了官方提供的I2Cdemo, 一个2个,其中一个是低功耗唤醒的,剩下一个是I2C_EEPROM_fast_mode_plus, 确实是用DMA做的。

再看细节之前,习惯性的去试试效果。
结果跑不起来。加了ITM打印,继续跑。错误信息如下:

>> I2C_EEPRMOM_fast_mode_plus
TXBUFFERSIZE = 160
>> call Error_Handler() ../Src/main.c : 155, i_loop_cnt = 1, Remaining_Bytes = 160


对应的代码如下:

  /*##-2- Start writing process ##############################################*/
  /* Initialize Remaining Bytes Value to TX Buffer Size */
  Remaining_Bytes = TXBUFFERSIZE;
  printf("TXBUFFERSIZE = %d\n", TXBUFFERSIZE);
  /* Initialize Memory address to 0 since EEPROM write will start from address 0 */
  Memory_Address = 0;
  /* Since page size is 4 bytes, the write procedure will be done in a loop */
  while (Remaining_Bytes > 0)
  {
    /* Reset the Transmission complete flag */
    I2C_Tx_Complete_Flag = 0;
    
    /* Write EEPROM_PAGESIZE */
    if(HAL_I2C_Mem_Write_DMA(&I2cHandle , (uint16_t)EEPROM_ADDRESS, Memory_Address, I2C_MEMADD_SIZE_16BIT, (uint8_t*)(aTxBuffer + Memory_Address), EEPROM_PAGESIZE)!= HAL_OK)
    {
      /* Writing process Error */
      printf(">> call Error_Handler() %s : %d, i_loop_cnt = %d, Remaining_Bytes = %d\n", __FILE__, __LINE__, ++i_loop_cnt, Remaining_Bytes);
      Error_Handler();
    }

这说明,头一次向I2C设备中写,就没写进去。

看了板子原理图,板子上通过STM32H743的I2C管脚(PB6, PB7)一共接了3个I2C设备。

  • U22 WM8994ECS/R, 这是音频编码芯片。

  • CN20 连接LCD的插座,LCD上有I2C芯片?

  • U26 STM32L152CCT6, 这接着一个ST的MCU.

  • CN4 一个I2C扩展连接器,官方板子没在上面插入I2C芯片.
    看着demo的意思,是要向一个I2C类型EEPROM里面读写数据。很可能是插到这个I2C扩展插座中的。
    从零件商的网站下载了CN4的3D模型。如果要插入扩展芯片的话,那也应该是一块扩展板。从前面那8个孔插入。
    在这里插入图片描述

从demo上看,不确定,到底和哪个I2C芯片通讯。
那只能看板子整体demo时,再看硬件I2C操作怎么用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值