F28335的存储器与寄存器
1 存储器及CMD文件的编写
1 F28335的存储器
1.1 F28335存储器的结构
1.2 F28335存储器的映像
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。
我们将《tms320f28335 数据手册》中“3.1 Memory Maps”存储器映射图截图下来如下图所示。(更清楚的图可以参考芯片数据手册 P34 页)
F28335 是采用多级流水线的增强的哈佛总线结构,能够并行访问程序和数据存储空间。在 F28335 芯片内部集成了大量的不同的存储介质,F28335 片上有 256K×16 位的 FLASH,34K×16 位的 SARAM,8K×16 位的 BOOT ROM,2K×16 位的 OPT ROM,采用统一寻址方式(程序、数据和 I/O 统一寻址),从而提高了存储空间的利用率,方便程序的开发。除此之外,F28335 还提供了外部并行扩展接口 XINTF,可进一步外扩存储空间。
F28335 的 CPU 内核本身并不包含任何存储器,通过总线访问芯片内部集成的或者外部扩展的存储器。其总线按照改进哈佛结构,分成了 32 位的数据读、数据写数据总线,地址读、地址写总线,公用数据总线即程序总线,包括 22 位的 程序地址总线,用于传送程序空间的读/写地址,32 位读数据程序总线,用于读 取
程序空间的指令或者数据。改进的哈佛结构其实是综合了冯.诺依曼结构的简 洁,哈佛结构的高效。F28335 应用 32 位数据地址和 22 位程序地址控制整个存 储器以及外设,最大可寻址 4G 字的数据空间和 4M 字程序空间。
通常写的程序所需存放空间 4M 已经足够了,如果大于 4M,意味着程序空间 不够处理,在实际中采用分页处理的方式,因为实际寻址数据控制为 4G,通过分页机制可以扩展实际寻址的程序空间。要找到对应程序的空间地址与数据的空间地址,就需要对空间地址进行编码,将空间地址进行逻辑编码就是映射。
从上图可以看到,F28335 对数据空间和程序空间进行了统一编址,有些空间既可以作为数据空间也可以作为程序空间,有些空间只能作为数据空间,有些空间是受到密码模块保护,有些空间地址是作为保留的,具体内容就要仔细对照这 张图来进行查阅了。
上图右半部分主要是通过 XINTF 外扩的存储空间,当片内数据存储空间不够的时候,我们可以外扩存储器。其中的保留区是为片内存储器所占的地址。
F28335 的各存储器地址都是连续编码的,且空间地址是唯一的。上图中左半部分首先对 M0 SARAM 从 0x000000 开始编码一直到 0x000400 结束,可以算出这是 1K16 的大小。当 STE 状态寄存器 VMAP=0 时,0x000000-0x000040 作为中断 向量的存储空间。M1 SARAM 从 0x000400-0x000800 也是 1K16 位大小,接着是 外设帧 0/1/2/3,这 4 个空间只能是数据空间,不能是程序空间,这些空间存放 着 F28335 外设寄存器,其中外设帧 1/2/3 空间是 Protected,表示这三个空间 存放的寄存器不可以随便配置,若要对存放在 Protected 空间内的寄存器进行配 置,要进行 EALLOW 声明,以 EDIS 结束声明,起到保护和警示作用。中间插了个 PIE 向量存储空间。0x002000-0x005000 是保留区,这段保留区被用作外部扩展 区 0,从这里也可以看到保留区的作用,这个外扩区同样也是受保护的,要改写 存放在该区域的寄存器值时同样需要 EALLOW 声明。外扩区还有两个分别为 1M 大小的 6 区与 7 区。接下来是 L0-L7 的 SARAM 区,均为 4K
大小,下边是 256K的 FLASH 空间,中间 0X33FFF8-0X340000 共 128 位用来保存 CSM 模块密码,保护FLASH、L0-L7、OTP 空间内存放的数据,下边是 2K 的 OTP 空间,其中 1K OTP 空 间主要是 TI 用来测试的引导程序,接下来是 L0-L3 SARAM空间,这是个双映射空间,也就是名字是一样的,但空间地址不一样,这样有利于数据备份。接下来是个 8K 的 BOOT ROM 空间,用来存放 Bootloader 程序,系统初始引导程序。
1.3 F28335 存储器特点
F28335 片上有 256K×16 位的 FLASH,34K×16 位的 SARAM,8K×16 位的 BOOT ROM,2K×16 位的 OPT ROM,采用统一寻址方式(程序、数据和 I/O 统一寻址), 从而提高了存储空间的利用率,方便程序的开发。除此之外,F28335 还提供了外部并行扩展接口 XINTF,可进一步外扩存储空间。
(1)片上SARAM
SARAM 即为单口随机读/写存储器,有别于双口 RAM,双口 RAM 是在一个 SRAM存储器上具有两套完全独立的数据线、地址线和读写控制线,并允许两个独立的 系统同时对该存储器进行随机性访问,即共享式多端口存储器。F28335 片内共 有 34K*16 位单周期单次访问随机存储器 SRAM,被分成 10 块,它们分别为 M0、 M1、L0-L7。
M0 和 M1 块 SRAM 的大小均为 1K*16 位,当复位后,堆栈指针指向 M1 块的起始地址,堆栈指针向上生长。M0 和 M1 段都可以映射到程序区和数据区。
L0-L7 块 SRAM 的大小均为 4K*16 位,即可以映射到程序空间也可以映射到数 据空间,其中 L0-L3 可映射到两块不同的地址空间并且受片上的 FLASH 中的密码 保护,以免存在上面的程序或数据被他人非法复制。
(2)BOOT ROM
BOOT ROM 可以叫做引导 ROM,主要装载了 TI 的引导装载程序,实现 DSP 的Bootloader 功能。MP/MC=0 时,DSP 被设置为微计算机模式,CPU 在复位后,指令跳转到 0X3FFC00-0X3FFFBF 区间内,执行 Bootloader 程序,这个在后面章节我们在来介绍,这里先不用管它。
(3)片上 FLASH和OTP
F28335片上由256K16位嵌入式FLASH存储器和2K16位一次性可编程EEPROM 存储器,它们均受片上 FLASH 中的密码保护。FLASH 存储器由 8 个 32K*16位扇区组成,用户可以对其中任何一个扇区进行擦除、编程和校验,而其它扇区不变。但是不能在其中一个扇区上执行程序来擦除和编程其它的扇区。其主要有 以下特点:
①整个存储器分成多段
②代码安全保护
② 功耗模式
③ 根据 CPU 频率调整等待周期
⑤FLASH 流水线模式能够提高线性代码的执行效率
F28335 片内 FLASH 存储器的分段情况如下所示:
F28335 的 OTP 存储器也是统一映射到程序和数据存储器空间,即可以为数据 存储也可以为程序存储器,与 FLASH存储器不同的是它只能被用户写一次,不能再次被擦除。
FLASH 与 OTP 存储器的功耗模式有以下三种状态:
(1)重启或者睡眠状态
芯片复位后,FLASH 与 OTP 处于睡眠状态,CPU 在 FLASH 和 OTP 存储器映射区域读数据或取代码使得状态改变,从睡眠状态变为备用状态,进一步会变为激活状态,在状态转换过程中,CPU 自动延迟等待,一旦状态转换完成,CPU 自动延迟等待,一旦状态转换完成,CPU 的访问恢复正常。
(2)备用状态
该状态的功耗要比睡眠状态大,需要较短的时间就转变为激活状态或者读状态。在状态转换过程中,CPU 自动延迟等待,一旦状态转换完成,CPU 的访问恢复正常。
(3)激活状态
在 激 活 状 态 下 , CPU 在 FLASH 与 OTP 的 存 储 器 映 射 空 间 内 读 取 访 问 收 到 FBANKWAIT 寄存器与 FOTPWAIT 寄存器控制。在状态转换时,从低功耗模式转换到了高功耗模式,延时是必要的,通过延时可以使用 FLASH 能够处在稳定的激活 状 态 。 在 延 时 器 件 , CPU都会自动等待直到延时完成为止 。睡眠到备用受FSTDBWAIT控制,备用到激活受 FACTICVEWAIT 寄存器控制。 对FLASH和OTP存储器来说,CPU读写数据操作主要有以下3种形式:
1、 32位取指令。
2、 16 位或32位数据空间读操作。
3、 16 位程序空间读操作。
一旦 FLASH 处于激活状态,那么对存储器映射区的访问可以被分为 FLASH 访问或OTP访问,OTP存储器小于4M ,在22位取址范围内,FLASH则大于4M ,所以 FLASH 访问的时候又分为了存储器的随机访问与存储器的页访问。FLASH 存储器是以阵列形式组成,每行有 2048 位。首次访问的某一行称 为随机访问,若
随后又访问该行则被称为页访问,一个随机和页访问的等待状态 数可以通过 FBANKWAIT 寄存器编程配置,随机访问的状态数由 RANDWAIT 位来 控制,指定访问的等待状态数由PAGEWAIT 位来控制。
OTP存储器的访问速度通常可以通过寄存器FOTPWAIT中的OTPWAIT中位来控制。OTP存储器的访问时间比FLASH要长。
FLASH 的流水线模式: FLASH 存储器数据掉电不丢失,所以通常用来保存应用代码。在代码执行期间,除非有中断发生,指令可以从存储器地址中连续获取,连续地址中的部分代码组成了主要的代码,又称为线性代码。为了提高线性代码的执行性能,可以采用FLASH流水线模式。FLASH 流水线模式在默认状态下无效,通过设置 FOPT 寄存器中ENPIPE位使能流水线模式,并且 FLASH 流 水线模式独立于 CPU 的流水线模式。
(4)代码安全模块 CSM
代码安全模块 CSM 是 F28335 上程序安全性的主要手段,它禁止未授权的用 户访问片内存储器,禁止私有代码的复制或者逆向操作。
(5)外设帧PF
(1)功能说明
安全模块限制 CPU 去访问片内存储器。实际上,对各种存储器的读/写访问都是通过 JTAG 端口或外设来进行的,而 CSM 模块所谓的代码安全性主要是针对片内存储器的访问来定义的,用来禁止未经授权去复制私人代码或数据。
当 CPU 访问片内存储器受到限制的时候,器件即处于保密、“安全”的状态。 当处于保密状态时,根据程序计数器当前指针的位置,可能有两种保护类型。如 果当前代码正运行在受保护的内部安全存储器模块上时,仅仅是 JTAG(即仿真器)的访问被阻断,而受安全保护的代码是可以访问受安全保护的数据的,相反, 如果代码运行在不受保护的非安全区时,所有对受保护的安全区的访问都被阻断。用户的代码可以动态地跳进或者跳出受保护的安全区,因此允许程序从不受保护的非安全区域调用函数,类似地,中断服务程序放在了安全受保护区域,而 主程序运行在不受保护的非安全区域。因为程序中总是有部分受到保护的。通过 一个 128 位的密码(相当于 8 个 16 位的字)来对安全区来进行加密或解密。这 段密码保存在 FLASH 的最后 8 个字中(0X33FFF8-OX33FFFF),也就是密码区中 (PWL) ,通过密码匹配( PMF ) , 可以解锁器件。
如果密码保护区中的 128 位数都是同一个数,这个器件不受保护,全是同一个数有两种可能,一种全为O,另一种全为1 ,一个新的FLASH或FLASH 被擦除后,就变为全 1 了,这样只要读一下密码区就能破解,还一种情况就是全为O,这时候器件是被加密了,但是不管密钥寄存器的内容是什么,器件都处在加密状态,即该器件无法解锁,这时候芯片就被完全锁住了,因此不要用全O作为密码。如果在擦除 FLASH 的期间,芯片复位了,那这个芯片的密码就不确定了,也不能解锁。芯片不能解锁(用全零作为密码、 FLASH 擦除期间复位、忘记密码),这时候芯片就完全锁住了,只能用来调试,而无法重新烧写程序。 用户用来解锁的寄存器为密钥寄存器,在存储空间映射地址为 0x0000 OAEO-0x00000AE7 ,该区域受EALLOW保护。当这个128位的密钥为全1时,密钥寄存器不需要与之匹配。当一开始调试FLASH区加密的芯片时,仿真器取得CPU的控制权需要一定的时间,在此期间,CPU正在开始运行,并且会执行保护加密区的操作,这个操作会引起仿真器断开连接,有两个方法可以解决这个问 题。
1 采用 wait-in-Reset 仿真模式,这种方法是让芯片保持在复位状态直到仿真器得到控制,这种方法要求仿真器要能支持这种模式。
2 采用 Branch to check boot mode 引导。这个方法会持续不停地让引导模式选择引脚。可以选择这种引导模式,一旦仿真器通过重新映射PC到另外 的地址或者改变引导模式选择引脚以进人引导而进行连接。
(2)CSM 对片内资源的影响
void InitSysCtrl(void)
{
Uint16 i;
volatile Uint16 *PWL;//定义一个 PWL 指针
/*
.....其它初始化过程省略
*/
PWL=&CsmPwl.PSWD0;//PWL 指针指向 PSWD0 处
for(i=0;i<8;i++)
相关文章:

F28335的存储器与寄存器
1 存储器及CMD文件的编写 1 F28335的存储器 1.1 F28335存储器的结构 1.2 F28335存储器的映像 存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。 我们将《tms320f28335 数据手册》中“3.1…...

Python在AOIP(Audio Over IP)方面的应用探讨
Python在AOIP(Audio Over IP)方面的应用探讨 引言 随着网络技术的发展,音频传输逐渐向基于IP的解决方案迁移。音频通过互联网进行传输被称为音频过IP(Audio Over IP,简称AOIP)。这种技术在广播、现场活动…...

C++20标准对线程库的改进:更安全、更高效的并发编程
引言 C20 是 C 语言的一个重要里程碑,它引入了许多新特性,其中就包括对线程库(thread)的重大改进。这些改进不仅增强了语言的并发编程能力,还解决了先前版本中的一些痛点问题。本文将详细介绍 C20 在线程方面的改进&a…...

外包干了三年,快要废了。。。
先简单说一下自己的情况,普通本科,在外包干了3年多的功能测试,这几年因为大环境不好,我整个人心惊胆战的,怕自己卷铺盖走人了,我感觉自己不能够在这样蹉跎下去了,长时间呆在一个舒适的环境真的会…...

微服务网关终极进化:设计模式驱动的性能与可用性优化(四)
时间:2024年09月12日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 希望大家帮个忙!如果大家有工作机会,希望帮小蒋推荐一下,小蒋希望遇到一个认真做事的团队,一起努力…...

Java中的服务端点日志记录:AOP与SLF4J
Java中的服务端点日志记录:AOP与SLF4J 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在Java后端服务开发中,日志记录是监控和调试应用的关键手段。通过合理使用AOP&…...

黑马头条第八天实战(上)
D8 1)登录功能需求说明 用户根据用户名和密码登录密码需要手动加盐验证需要返回用户的token和用户信息 2)模块搭建思路步骤 2.1)模块作用 先捋一下之前搭模块干了啥 feign-api 远程调用 自媒体保存时调用远程客户端进行增加文章&#x…...

swift qwen2-vl推理及加载lora使用案例
参考: https://swift.readthedocs.io/zh-cn/latest/Instruction/LLM%E5%BE%AE%E8%B0%83%E6%96%87%E6%A1%A3.html#%E5%BE%AE%E8%B0%83%E5%90%8E%E6%A8%A1%E5%9E%8B https://blog.csdn.net/weixin_42357472/article/details/142150209 SWIFT支持300+ LLM和50+ MLLM(多模态大模型…...

如何使用 Choreographer 进行帧率优化
Choreographer 是 Android 提供的一个工具类,专门用来协调 UI 帧的渲染。你可以通过 Choreographer 来精确控制帧的绘制时机,以优化帧率,确保应用的流畅度。以下是如何使用 Choreographer 进行帧率优化的详细步骤: 1. 理解 Chore…...

稳定驱动之选SiLM5350系列SiLM5350MDBCA-DG单通道隔离栅极驱动器(带内部钳位):工业自动化的可靠伙伴
SiLM5350系列SiLM5350MDBCA-DG是具体有10A峰值输出电流能力,单通道隔离式栅极驱动器。SiLM5350MDBCA-DG可提供内部钳位功能。驱动电源电压为4V至30V。3V至18V的宽输入VDDI范围使驱动器适合与模拟和数字控制器接口。所有电源电压引脚都有欠压锁定 (UVLO) 保护。 SiLM…...

鸿蒙OpenHarmony【轻量系统芯片移植】内核移植
移植芯片架构 芯片架构的移植是内核移植的基础,在OpenHarmony中芯片架构移植是可选过程,如果当前OpenHarmony已经支持对应芯片架构则不需要移植操作,在“liteos_m/arch”目录下可看到当前已经支持的架构,如表1: 表1 …...

多字节字符和宽字符
小时候,买东西的单位是一角、二角和五角,现在的单位是一元、五元和十元。人类社会的发展和计算机发展本质没啥两样,形态不同而已。 编码格式的历史 尽管早期只用ASCII码就可以表达所有字符,但计算机日益推广让其他国家不同语言的…...

C++缺省参数
个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 缺省参数的概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则…...

深度学习中的常用线性代数知识汇总——第一篇:基础概念、秩、奇异值
文章目录 0. 前言1. 基础概念2. 矩阵的秩2.1 秩的定义2.2 秩的计算方法2.3 秩在深度学习中的应用 3. 矩阵的奇异值3.1 奇异值分解(SVD)3.2 奇异值的定义3.3 奇异值的性质3.4 奇异值的意义3.5 实例说明3.6 奇异值在深度学习中的应用 0. 前言 按照国际惯例…...

MATLAB | R2024b更新了哪些好玩的东西?
Hey, 又到了一年两度的MATLAB更新时刻,MATLAB R2024b正式版发布啦!,直接来看看有哪些我认为比较有意思的更新吧! 1 小提琴图 天塌了,我这两天才写了个半小提琴图咋画,MATLAB 官方就出了小提琴图绘制方法。 小提琴图…...

嵌入式硬件基础知识
嵌入式硬件基础知识涵盖了嵌入式系统中的硬件组成及其工作原理,涉及处理器、存储器、外设接口、电源管理等多个方面。这些硬件共同构成了一个完整的嵌入式系统,用于执行特定任务。下面我们来详细介绍嵌入式硬件的基础知识。 1. 嵌入式系统的组成 嵌入式…...

keepalived和lvs高可用集群
keepavlied和lvs高可用集群搭建 主备模式: 关闭防火墙和selinux systemctl stop firewalld setenforce 0部署master负载调度服务器 zyj86 安装ipvsadm keepalived yum install -y keepalived ipvsadm修改主节点配置 vim /etc/keepalived/keepalived.conf! Conf…...

在VMware部署银河麒麟系统
虚拟机镜像安装文件从下面下载: 银河麒麟桌面操作系统V10SP1 2403 下载地址_银河麒麟v10镜像iso下载-CSDN博客 虚拟机安装要求硬盘大小至少40G,我悬着60G 选择桥接网络安装后上不了网并且和本机也互相ping不通,因此选择Nat方式,然后重启,就可以上网 下面开始安装,第一个…...
git删除本地分支报错:error: the branch ‘xxx‘ is not fully merged
git删除本地分支报错:error: the branch xxx is not fully merged error: the branch xxx is not fully merged 直接: git branch -D xxx 就可以。 如果删除远程分支: git push origin --delete origin/xxx git强制删除本地分支 git branc…...

Tensorflow 兼容性测试-opencloudos
介绍 Tensorflow 兼容性测试: 测试 Tensorflow 各个版本在 OpenCloudOS Stream 的安装支持 操作系统 [rootlab101 ~]# cat /etc/os-release NAME"OpenCloudOS Stream" VERSION"23" ID"opencloudos" ID_LIKE"opencloudos" VERSION_I…...

Windows主机上安装CUPS服务端共享USB打印机实践心得
背景 平时主力机器是Windows,不想额外开一个Linux服务器来共享打印机。由于主力机平时也不关机,尝试在Windows上安装CUPS服务。 结论 先说结论,结论是可行,但是麻烦且不稳定,虚拟机方案少折腾,但是资源消耗…...

socket通讯原理及例程(详解)
里面有疑问或者不正确的地方可以给我留言。 对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问: 什么是TCP/IP、UDP?Socket在哪里呢?Socket是什么呢࿱…...

vue3使用provide和inject传递异步请求数据子组件接收不到
前言 一般接口返回的格式是数组或对象,使用reactive定义共享变量 父组件传递 const data reactive([])// 使用settimout模拟接口返回 setTimeout(() > {// 将接口返回的数据赋值给变量Object.assign(data, [{ id: 10000 }]) }, 3000);provide(shareData, dat…...

对称矩阵的压缩存储
1.给自己出题:自己动手创造,画一个5行5列的对称矩阵 2.画图:按“行优先”压缩存储上述矩阵,画出一维数组的样子 3.简答:写出元素 i,j 与 数组下标之间的对应关系 4.画图:按“列优先”压缩存储上述矩阵&a…...

高阶数据结构之哈希表基础讲解与模拟实现
程序猿的读书历程:x语言入门—>x语言应用实践—>x语言高阶编程—>x语言的科学与艺术—>编程之美—>编程之道—>编程之禅—>颈椎病康复指南。 前言: 哈希表(Hash Table)是一种高效的键值对存储数据结构&…...

基于STM32设计的智能货架(华为云IOT)(225)
文章目录 一、前言1.1 项目介绍【1】项目背景【2】项目支持的功能【3】项目硬件模块组成【4】ESP8266工作模式配置【5】Android手机APP开发思路【6】项目模块划分1.2 项目开发背景【1】选题来源与背景【2】国内外研究现状【3】课题研究的目的和内容【4】参考文献【5】研究内容【…...

JDBC API详解一
DriverManager 驱动管理类,作用:1,注册驱动;2,获取数据库连接 1,注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); 查看Driver类源码 static{try{DriverManager.registerDriver(newDrive…...

工厂安灯系统在设备管理中的重要性
在现代制造业中,设备管理是确保生产效率和产品质量的关键环节。随着工业4.0的推进,越来越多的企业开始采用智能化的设备管理系统,其中安灯系统作为一种有效的管理工具,逐渐受到重视。安灯系统最初源于日本的丰田生产方式ÿ…...

【LabVIEW学习篇 - 23】:简单状态机
文章目录 简单状态机状态机的创建和了解状态机实现红绿灯 简单状态机 一个优秀的应用程序离不开好的程序框架,不仅要很好满足用户的功能需求,还要考虑到系统的稳定性、实时性、可扩展性、可维护性,执行效率等方面。借用一些成熟的设计框架&a…...

【CSS】 Grid布局:现代网页设计的基石
引言 最近接到一个网页布局比较复杂的页面,看了半天还是决定用grid布局来写,记录一下 布局是构建用户界面的关键部分。CSS Grid布局提供了一种简单而强大的方式来创建复杂的网格布局,它让设计师和开发者能够更直观、更灵活地控制网页的结构。…...