硬汉嵌入式论坛

 找回密码
 立即注册
查看: 205|回复: 8
收起左侧

[STM32H7] EEPROM M95256 官方程序的疑惑

[复制链接]

21

主题

96

回帖

159

积分

初级会员

积分
159
发表于 2025-11-3 17:19:57 | 显示全部楼层 |阅读模式
目前需要优化项目上 EEPROM M95256 的驱动函数,所以看 ST 官方发布的扩展包存在一些疑惑。手里没有 EEPROM 和相应 MCU 板子,想请教一下大佬们。
扩展包下载网址:X-CUBE-EEPRMA1 | Product - 意法半导体STMicroelectronics

在 M95xxx 的代码里 EEPRMA2_M95_ReadPage() 我认为存在问题。
函数路径:en.x-cube-eeprma1\Drivers\BSP\EEPRMA2\eeprma2_m95.c


EEPRMA2_M95_ReadPage()  的参数 TarAddr 如果理解成为 EEPROM 地址,但是在读取操作的时候又乘以页的大小,我认为在这里是有问题的。
  • M95PageSize 是 EEPROM 每一页的总字节值
  • 看了 M95Drv[Instance]->ReadPage() 函数内部逻辑,填充的参数 iPageAddress 应该是 EEPROM 地址


[C] 纯文本查看 复制代码
/**
  * @brief  Reads complete page from the memory at page start address
  * @param  Instance : SPI EEPROMs instance to be used
  * @param  pData : pointer to the data to read       
  * @param  TarAddr : starting page address to read
  * @param  Size : Size in bytes of the value to be Read
  * @retval BSP status
  */
int32_t EEPRMA2_M95_ReadPage(uint32_t Instance, uint8_t * pData, const uint32_t TarAddr, const uint16_t Size)
{
   int32_t ret = BSP_ERROR_NONE;
  EEPRMA2_M95MemorySizeLocator(Instance);
  if ((((uint64_t)TarAddr + (uint64_t)Size) > M95MemorySize) || (M95PageSize == 0U))
  {
    return BSP_ERROR_WRONG_PARAM;
  }
  
  uint32_t iNumberOfPage = (TarAddr + Size) / M95PageSize;
  uint32_t iRemainder = (TarAddr + Size) % M95PageSize;
  uint32_t PageAddress = TarAddr * M95PageSize;
  uint32_t iPageNumber = TarAddr;
  if (iRemainder !=0U)
  {
    iNumberOfPage += 1U;  
  }
  
  if (iNumberOfPage <= 1U)
  {
    if (M95Drv[Instance]->ReadPage(M95CompObj[Instance], pData, PageAddress, M95PageSize) != BSP_ERROR_NONE)
    {
      ret = BSP_ERROR_COMPONENT_FAILURE;
    }
    else
    {
      ret = BSP_ERROR_NONE;
    }
  }
  else
  {
    for (uint32_t iCounter=0; iCounter<iNumberOfPage; iCounter++)
    {
      uint32_t iPageAddress = iPageNumber * M95PageSize;
      ret = M95Drv[Instance]->ReadPage(M95CompObj[Instance], &pData[0U + (iCounter*M95PageSize)], iPageAddress,M95PageSize);     
      iPageNumber++;
      HAL_Delay(5);  
    }
  }    
  return ret; 
}

回复

使用道具 举报

11

主题

97

回帖

130

积分

初级会员

积分
130
发表于 2025-11-3 17:31:56 | 显示全部楼层
哥们,你这一个帖子发7边 ,刷屏了
回复

使用道具 举报

11

主题

97

回帖

130

积分

初级会员

积分
130
发表于 2025-11-3 17:32:01 | 显示全部楼层
....
回复

使用道具 举报

21

主题

96

回帖

159

积分

初级会员

积分
159
 楼主| 发表于 2025-11-3 17:32:51 | 显示全部楼层
让我看看各位 发表于 2025-11-3 17:32
哥们,你这一个帖子发7边 ,刷屏了

我知道,网页卡了,现在在找删除方式
回复

使用道具 举报

4

主题

428

回帖

440

积分

高级会员

积分
440
发表于 2025-11-3 17:33:54 | 显示全部楼层
刘心武 发表于 2025-11-3 17:32
我知道,网页卡了,现在在找删除方式

有的,别人没回复过的帖子,编辑里可删除.
回复

使用道具 举报

11

主题

97

回帖

130

积分

初级会员

积分
130
发表于 2025-11-3 17:38:05 | 显示全部楼层
本帖最后由 让我看看各位 于 2025-11-3 17:39 编辑

我记得EEPROM的读写操作都是以页地址位单位的,关于这个问题:
  • 看了 M95Drv[Instance]->ReadPage() 函数内部逻辑,填充的参数 iPageAddress 应该是 EEPROM 地址

需要通过电平传输的地址,应该也是页地址 ,所以下发页地址是没有问题的 TatAddr这个参数也是页地址

回复

使用道具 举报

21

主题

96

回帖

159

积分

初级会员

积分
159
 楼主| 发表于 2025-11-3 17:42:50 | 显示全部楼层
本帖最后由 刘心武 于 2025-11-3 17:43 编辑
让我看看各位 发表于 2025-11-3 17:38
我记得EEPROM的读写操作都是以页地址位单位的,关于这个问题:
看了 M95Drv->ReadPage() 函数内部逻辑 ...

这个函数在开始对参数判断的,下面这个判断应该是 EEPROM 地址,不是第几页吧

[C] 纯文本查看 复制代码
if ((((uint64_t)TarAddr + (uint64_t)Size) > M95MemorySize) || (M95PageSize == 0U))
  {
    return BSP_ERROR_WRONG_PARAM;
  }



函数内又把它当作“第几页”来使用,不是前后矛盾了吗
回复

使用道具 举报

11

主题

97

回帖

130

积分

初级会员

积分
130
发表于 2025-11-3 18:07:03 | 显示全部楼层
对比了其他函数:
X-CUBE-EEPRMA1/Drivers/BSP/EEPRMA2/eeprma2_m95.c at main · STMicroelectronics/X-CUBE-EEPRMA1 · GitHub

这个地函数应该就是 把 页地址 和 字节地址 混淆了
1 . 其他函数都是当字节地址用的:
EEPRMA2_M95_ReadData()  用字节地址;
EEPRMA2_M95_WriteByte()  用字节地址;
EEPRMA2_M95_WriteData() 用字节地址;
到EEPRMA2_M95_WritePage()  逻辑与 ReadPage 一致,也混淆了“页号”和“字节地址”。

而且,手册中 ,第16页The address bits A14–A0 define the byte location in the 32-Kbyte memory array.
这个EEpeom的读写命令全部基于字节偏移地址,而不是页号.

C140883_EEPROM_M95256-RMN6TP_规格书_WJ125819.PDF

929.08 KB, 下载次数: 1

回复

使用道具 举报

21

主题

96

回帖

159

积分

初级会员

积分
159
 楼主| 发表于 2025-11-3 19:26:55 | 显示全部楼层
让我看看各位 发表于 2025-11-3 18:07
对比了其他函数:
X-CUBE-EEPRMA1/Drivers/BSP/EEPRMA2/eeprma2_m95.c at main · STMicroelectronics/X-CU ...

好的,感谢大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-11-21 23:46 , Processed in 0.045860 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表