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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版