搜索
查看: 2285|回复: 13

[已解决] STM32访问I2C地址超出16位怎么处理?

[复制链接]

该用户从未签到

54

主题

499

帖子

152

蝴蝶豆

论坛元老

最后登录
2021-3-29
发表于 2019-7-19 07:41:08 | 显示全部楼层 |阅读模式
比如说目前EEPROM我只敢用到AT24C512这样的,地址最多是65535,因为HAL库中地址最大只能是16位(65535)
现在需求变了需要增加存储数据量,我打算用上AT24CM02,但是不知道怎么处理,所以来论坛求助。谢谢!
回复

使用道具 举报

该用户从未签到

21

主题

1073

帖子

442

蝴蝶豆

论坛元老

最后登录
2021-5-10
发表于 2019-7-23 12:17:32 | 显示全部楼层
奏奏奏 发表于 2019-7-22 15:22
谢谢,应该是之前其他回答里贴图出来的说明描述吧。

是的。你甚至可以理解成一片 AT24CM02 相当于占用四个连续地址的四片 AT24C512。
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

37

主题

551

帖子

62

蝴蝶豆

金牌会员

最后登录
2024-3-30
发表于 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应该能解决问题。
回复 支持 反对

使用道具 举报

该用户从未签到

54

主题

499

帖子

152

蝴蝶豆

论坛元老

最后登录
2021-3-29
 楼主| 发表于 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位的
回复 支持 反对

使用道具 举报

该用户从未签到

37

主题

551

帖子

62

蝴蝶豆

金牌会员

最后登录
2024-3-30
发表于 2019-7-19 09:27:29 | 显示全部楼层
如图
微信图片_20190719092642.png
回复

使用道具 举报

该用户从未签到

37

主题

551

帖子

62

蝴蝶豆

金牌会员

最后登录
2024-3-30
发表于 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

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

744

帖子

287

蝴蝶豆

论坛元老

最后登录
2021-3-27
发表于 2019-7-19 09:46:27 | 显示全部楼层
更新协议稍微改一下代码,扩展位数就得了。看器件规格书。

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

54

主题

499

帖子

152

蝴蝶豆

论坛元老

最后登录
2021-3-29
 楼主| 发表于 2019-7-19 09:56:11 | 显示全部楼层
す疯Ⅱ恒す 发表于 2019-7-19 09:46
更新协议稍微改一下代码,扩展位数就得了。看器件规格书。

好的,至少方向明确了。我试一下。谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

126

帖子

80

蝴蝶豆

金牌会员

最后登录
2021-4-6
发表于 2019-7-19 15:49:35 | 显示全部楼层
本帖最后由 Dandjinh 于 2019-7-19 15:50 编辑

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

sshot-2.png

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

133

主题

4688

帖子

239

蝴蝶豆

版主

最后登录
2021-4-10
发表于 2019-7-19 16:25:32 | 显示全部楼层
更换E2设备后,请按照I2C协议进行更新。像楼上截图所述,E2设备的地址会用两个字节表示。有的设备是通过设备地址加片内地址进行地址处理。

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

54

主题

499

帖子

152

蝴蝶豆

论坛元老

最后登录
2021-3-29
 楼主| 发表于 2019-7-19 16:25:59 | 显示全部楼层
Dandjinh 发表于 2019-7-19 15:49
手册上有说,数据地址还是16位,最高两位是在设备地址的bit1,bit2。

好的,谢谢!值得参考
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-28 11:33 , Processed in 0.191563 second(s), 45 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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