你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32访问I2C地址超出16位怎么处理?

[复制链接]
奏奏奏 提问时间:2019-7-19 07:41 /
比如说目前EEPROM我只敢用到AT24C512这样的,地址最多是65535,因为HAL库中地址最大只能是16位(65535)
现在需求变了需要增加存储数据量,我打算用上AT24CM02,但是不知道怎么处理,所以来论坛求助。谢谢!
收藏 评论13 发布时间:2019-7-19 07:41

举报

13个回答
maxtch 回答时间:2019-7-23 12:17:32
奏奏奏 发表于 2019-7-22 15:22
谢谢,应该是之前其他回答里贴图出来的说明描述吧。

是的。你甚至可以理解成一片 AT24CM02 相当于占用四个连续地址的四片 AT24C512。
byronsong 回答时间:2019-7-19 09:15:02
本帖最后由 songshiqun2010 于 2019-7-19 09:17 编辑

static HAL_StatusTypeDef I2C_MasterRequestWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Timeout, uint32_t Tickstart)

楼主说的是这个 DevAddress 只有16位吗?
这个是设备地址 一般是7或10位。数据地址是在数据段根据器件容量填充的。

https://www.stmcu.org.cn/module/forum/thread-621092-1-1.html

用这个pack应该能解决问题。
奏奏奏 回答时间:2019-7-19 09:25:14
songshiqun2010 发表于 2019-7-19 09:15
static HAL_StatusTypeDef I2C_MasterRequestWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32 ...

我用的是这个函数:

        while(HAL_I2C_Mem_Read(&hi2c1, ADDR_24LCxx_Read, CAN_ID_ADDR_in_24LCxx, I2C_MEMADD_SIZE_16BIT,ReadBuffer,1, 0xFFFFFFFF)!=HAL_OK)
        {
                HAL_IWDG_Refresh_with_reset(&hiwdg);
        }       

其中这个 I2C_MEMADD_SIZE_16BIT 是16位,这个参数还有一个 是 8位的
byronsong 回答时间:2019-7-19 09:27:29
如图
微信图片_20190719092642.png
byronsong 回答时间:2019-7-19 09:30:41
奏奏奏 发表于 2019-7-19 09:25
我用的是这个函数:

        while(HAL_I2C_Mem_Read(&hi2c1, ADDR_24LCxx_Read, CAN_ID_ADDR_in_24LCxx, I2C_M ...

没用过这个api,看来在下是答非所问了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

疯de_恒 回答时间:2019-7-19 09:46:27
更新协议稍微改一下代码,扩展位数就得了。看器件规格书。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

奏奏奏 回答时间:2019-7-19 09:56:11
す疯Ⅱ恒す 发表于 2019-7-19 09:46
更新协议稍微改一下代码,扩展位数就得了。看器件规格书。

好的,至少方向明确了。我试一下。谢谢!
Dandjinh 回答时间:2019-7-19 15:49:35
本帖最后由 Dandjinh 于 2019-7-19 15:50 编辑

手册上有说,数据地址还是16位,最高两位是在设备地址的bit1,bit2。

sshot-2.png

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

废鱼 回答时间:2019-7-19 16:25:32
更换E2设备后,请按照I2C协议进行更新。像楼上截图所述,E2设备的地址会用两个字节表示。有的设备是通过设备地址加片内地址进行地址处理。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

奏奏奏 回答时间:2019-7-19 16:25:59
Dandjinh 发表于 2019-7-19 15:49
手册上有说,数据地址还是16位,最高两位是在设备地址的bit1,bit2。

好的,谢谢!值得参考
奏奏奏 回答时间:2019-7-19 17:33:46
安 发表于 2019-7-19 16:25
更换E2设备后,请按照I2C协议进行更新。像楼上截图所述,E2设备的地址会用两个字节表示。有的设备是通过设 ...

好的。感谢各位大佬的宝贵意见。
我弄好后看是不是把关键部分分享出来,让其他工程师少走弯路。
maxtch 回答时间:2019-7-22 11:08:55
根据手册,AT24CM02 地址也是 16 位的,但占用多个 I2C 总线地址。
奏奏奏 回答时间:2019-7-22 15:22:21
maxtch 发表于 2019-7-22 11:08
根据手册,AT24CM02 地址也是 16 位的,但占用多个 I2C 总线地址。

谢谢,应该是之前其他回答里贴图出来的说明描述吧。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版