硬汉嵌入式论坛

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

[SRAM] STM32H7的ITCM虽然是指令RAM空间,但是用来做通用RAM空间也是没问题的

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106828
QQ
发表于 2021-7-27 09:13:29 | 显示全部楼层 |阅读模式

ITCM指令RAM空间有64KB,DTCM数据RAM空间有128KB

ITCM除了可以加载代码运行,也可以做通用RAM空间。实际在稍复杂的工程里面测试没问题。



1、AXI SRAM(D1域,200MHz)
地址:0x2400 0000
大小: 512KB


2、AHB SRAM(D2域,200MHz)
SRAM1
地址:0x3000 0000
大小:128KB

SRAM2
地址:0x3002 0000
大小:128KB

SRAM3
地址:0x3004 0000
大小:32KB

3、AHB RAM(D3域,200MHz)
SRAM4
地址:0x3800 0000
大小:64KB

BKUP SRAM
地址:0x3880 0000
大小:4KB


4、TCM RAM(400MHz)
DTCM-RAM
地址:0x2000 0000
大小:128KB

ITCM-RAM
地址:0x0000 0000
大小: 64KB
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2021-12-16 10:24:28 | 显示全部楼层
这个问题困扰我很久了,理论上都是TCM,之前的教程一直说要把Vector 放到DTCM 我就难以理解。还想问一下,我是否可以通过修改SCT ,debug.ini 配置,让程序直接刷在ITCM 里面,然后把钳4KB 用作虚拟rom,后边的60KB当做ram 执行,我理解是没问题的,但是debug 的时候 keil 0x0 读取到的内容根本不是map 上边SP和Reset_handle 的地址。这个是因为STM32 的重映射关系导致的么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106828
QQ
 楼主| 发表于 2021-12-16 11:00:46 | 显示全部楼层
xuanyuanjianyun 发表于 2021-12-16 10:24
这个问题困扰我很久了,理论上都是TCM,之前的教程一直说要把Vector 放到DTCM 我就难以理解。还想问一下, ...

H7不需要F4,F1那种重映射,是直接配置启动地址的。

之前做过一个RAM调试的例子,供参考,不过不是用的ITCM

基于STM32H7的内部SRAM程序调试工程模板(512KB的AXI SRAM存程序,DTCM做主RAM)
https://www.armbbs.cn/forum.php? ... 3112&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2021-12-16 11:33:41 | 显示全部楼层
看了系统架构图,ITCM是可以通过系统总线访问,因而也可以当RAM用。
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2021-12-16 12:20:34 | 显示全部楼层
eric2013 发表于 2021-12-16 11:00
H7不需要F4,F1那种重映射,是直接配置启动地址的。

之前做过一个RAM调试的例子,供参考,不过不是用的 ...

https://www.armbbs.cn/forum.php? ... d=110125&extra=
刚发现是command 的括号导致pc 指针初始化失败。修改后已经成功。请硬汉哥多指教
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2021-12-16 12:22:15 | 显示全部楼层
emwin 发表于 2021-12-16 11:33
看了系统架构图,ITCM是可以通过系统总线访问,因而也可以当RAM用。

请教下,你说的系统架构图是哪个?我看到的都是直接挂在core 上
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-5-25 17:32:02 | 显示全部楼层
既然ITCM和DTCM的区别不大,那么我的问题来了,程序可不可以直接在DTCM里面运行
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-5-25 22:50:07 | 显示全部楼层
我记得ITCM和DTCM带宽不一样,ITCM是32bit,DTCM是64bit
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106828
QQ
 楼主| 发表于 2022-5-27 00:53:04 | 显示全部楼层
浮生莫若闲 发表于 2022-5-25 17:32
既然ITCM和DTCM的区别不大,那么我的问题来了,程序可不可以直接在DTCM里面运行

没问题,也可以的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106828
QQ
 楼主| 发表于 2022-5-27 00:56:20 | 显示全部楼层
Jx13 发表于 2022-5-25 22:50
我记得ITCM和DTCM带宽不一样,ITCM是32bit,DTCM是64bit

https://developer.arm.com/docume ... t-the-memory-system

The ITCM interface is 64-bits wide. The DTCM is divided into two 32-bit wide interfaces, D0TCM and D1TCM. The upper 32-bits of data is on the D1TCM interface and the lower 32-bits of the data is on the D0TCM interface.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 10:20 , Processed in 0.226148 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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