STM32H743I-EVAL2_I2C_EEPROM_fast_mode_plus

感情迁移 提交于 2020-02-08 03:18:33

前言

看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操作怎么用。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!