(17) -系统设计之Flash编程和配置

+荐课 提问/讨论 评论 收藏
  • 本课程为精品课,您可以登录eeworld继续观看:
  • (17) -系统设计之Flash编程和配置
  • 登录
接下来我们看看F2837X的flash的配置和编程 F2837X有RAM flash、ROM等 最常用的是RAM和flash 其中RAM的特点是访问速度快 一般是单周期的 它的缺点是会丢失数据 因此RAM主要用来保存数据 以及程序运行过程中需要用到的变量 需要快速执行的代码 等等 FLASH的特点是掉电不丢失 但它的访问速度慢 因此它里面保存用户的执行代码 不变的数据 也就是数据表等表格 接下来看看FLASH的基本操作 我们的FLASH按照使用分为 多次擦除的flash 以及只能一次擦除的OTP flash使用去必须有一个初始化过程 最主要的设置flash的等待时间 和位置 由于CPU的执行速度较快 比如2837X的CPU执行速度是200兆赫兹 我的flash的访问速度相对慢 因此 为了匹配 必须增加等效的周期 芯片在复位时 等待周期默认最大值 15个等待周期 我们可以在初始化过程中设置寄存器的值 来改变等待周期 比如2837X最高运行频率200兆赫兹的时候 flash的周期是3个周期 相对应的不同的工作频率的话 这个等待周期不同 我们都有这些推荐值 不止有flash受到等待周期的影响 ODP不受它的影响 它的固定时间是11个系统周期 记住一点 flash初始化配置的代码不能在flash中运行 必须在上电的时候把flash初始化的代码 拷贝到RAM中执行 刚才说了 我的CPU实行速度快 最高达到200兆 我的flash速度慢 所以必须提高我的flash速度 能够满足我CPU操作需求 这个地方就涉及到我如何加速 在我们的C2000里面 我们采用预取缓冲机制 一个是预取 一个是缓冲 预取意思我一次从flash中读取多个字节的 这个地方 我们读取128字节的指令 然后把数据放入我的两级的缓存器里面 然后把数据发给CPU的内核 这样的话 因为这个是在我的RAM里面的 因此这地方就能把他加速了 也就是我一次性多读取几个过来 在CPU这里执行的时候 我不断读取 放到缓存里面 通过缓存提供数据 这样把速度提上来 针对指令的话 我们有预取和缓冲机制的 针对我的数据 我只有预取没有缓冲机制 也就是 我数据读过来 我放这里等待的CPU内核 的一个读取 C2000的话 一般采取8级的缓冲 8级的预存 我们看看代码执行的性能 首先 我们假设 我们的2837X工作在200兆赫兹 16位的指令 如果它是内部的RAM中的 也就是你的代码速度要求比较快的 我把它拷贝到RAM中执行 如果从RAM中读取指令的话 我执行速度会非常快 取址速度快 单周期的 可以工作在200兆的MPS 如果从flash中读取 等待时间设置为3个周期 默认3个周期 我每6个周期读取128字节的指令 然后 用8个周期来执行 这样总统128除以8个周期 约等于200MIPS 但考虑到我的取址过程中 会有一些不连续性 因此性能稍微降低 达到180MIPS 从此看出 最好是把程序代码拷贝到RAM中执行 把200MIPS放到FLASH中 能达到180MIPS 根据上面的推算 我们得出这个表格 内部RAM是单周期的访问 不管是16还是32位的 针对flash 我是接近1 也就是0.9 这样算的话 flash接近1 同时需要注意 在flash数据访问期间 我的指令获取的管道是停止的 也就是 我从flash读取数据 我不能同时从代码区读取数据 现在我们看看flash和OTP低功耗模式 flash和OTP三种电压模式 一个是sleep 休眠模式 它消耗的电源最少 另外是standby 待机模式 它的功耗比sleep模式高 但它可以很快进入激活模式 激活模式是功耗最高的 也是芯片正常执行程序所需的工作模式 如果在我的flash里面 长期没有flash OTP访问操作 这些请求的话 我的flash和OTP都进入低功耗模式 但进入低功耗模式后 这个sleep模式后 如果有一个访问请求 我自动进入待机模式 然后是激活模式 采用低功耗模式的最重要的好处是 我可以保证芯片的功耗 降到最低 激活模式是通过flash里面的控制设定 然后是我们的ECC保护 我们的2837XECC保护 主要作用是 筛选出flash和OTP里面的故障 而我们采用的保护机制是 SECDED 单字节纠错 双字节检测的机制 假如我的flash OTP里面 单个字节被篡改的话 我能自动检测到 把错误改正 但如果有两个字节 发生错误的话 我无法改正它 只能报警 也就是我能检测到错误 针对flash和OTP每个64字节 每个64位 需要计算一个ECC代码 把它编写到我的ECC存储器里面 它跟我的flash OTP编程时一起写入到寄存器里面的 在取址或者读数据时 我根据每个64位数据 然后做ECC的校验 校验跟我的ECC里保存的内容对比 对上的话 就是没错误 正常执行 如果发生了一个字节的错误的话 我可以把它改正 如果两个字节的错误 我可以检测 并报警 这就是我们的ECC保护机制 每64个字节我产生8个子节的ECC代码 把它放在对应的寄存器里面 ECC保护使能也是在flash ECC 寄存器里面使能 把它打开 再来看flash的编程 它实际上是将我放在flash里面的数据 和代码 如何烧写到flash中去 我们所有flash的烧写都是通过CPU 来执行的 分为两个过程 第一个是 外部通过SCI SPI接口把数据导入我的RAM中 第二步 在RAM中执行flash的擦除 烧写函数 将数据写入flash 这过程需要CPU执行 也就是烧写分为两步 第一步将代码放入RAM中 第二步在RAM中运行RAM函数 烧写函数 将数据放入FLASH中 前面这种将数据放入RAM中 不同的方式 是我们的boot决定的 有JTAG SCI SPI I2C各种不一样的 boot方式不同是通过外部的GPL口的boot来决定的 其中 JTAG直接可以把代码烧到RAM中 除了它外 其他这些方式 必须经过ROM bootloader将这些代码导入到RAM中 那flash编程基本操作有三个 一个是擦除 一个是编程 一个是验证 擦除是将所有位归零 也就是将所有的字节变成1 归零不是把它写成0 而是1 所有编程都是将相应的位从1到0 就是编程 验证的话 我烧写的程序的数据和我烧到flash中的数据是否是一样的 如果不同 会报错 flash最小的擦除单位是一个扇区 最下的编程字节是一个位 一个bit 这样的话 我的flash可以当做一方来用 但最后一点是 我擦除把一个扇区擦除掉 所以作为一方来用的话 需要把其他不需要的数据先拷出来 然后在烧回flash 过程稍微复杂 而且在flash的烧写过程中 务必保证 芯片不要断电 不要有电源大波动 假如发生断电 这个时候密码区全部变成0的时候 我的芯片就完全锁死了 就算不是全部是0的话 我也不知道 密码区写了哪些数据 芯片就很难解开 flash的烧写过程是非常短暂的 所以发生意外的概率很小 从我们外部来说 主要保证一点 在烧写程序时 必须保证电源稳定 那么烧写程序的工具我们有 仿真器 串口烧写 我们看看flash编程实用的程序 JTAG我们有CCS 是集成的闪存编程器 还有CCS UNIFLASH 以及第三方提供的软件 基于SCI串口编程的话 有第三方提供的C2PROG 在生产上编程的话 我们有C2000啊 还有一些BP的编程器啊 那么还有一些比如生产过程中用到的升级器 也是基于串口control引导程序 来导入烧写程序的 所有这些工具都可以在C2000链接上找到
课程介绍 共计28课时,4小时27分22秒

C2837x入门指南

TI C2000 MCU PWM F2837xD ADC DAC DMA CLA C2837x CMP SDFM CAP QEP c28x

F2837x系列的最新 C2000™ Delfino™ 32 位 F2837xD 微控制器 (MCU),为工业实时控制实现最新创新,并设定了全新性能标准。这些最新 MCU 支持双核 C28x 处理功能与双实时控制加速器(也称为控制律加速器或 CLA),可提供 800 MIPS 浮点性能,从而可帮助设计人员为计算要求严格的控制应用开发低时延系统。此外,设计人员还可通过将多个嵌入式处理器整合在单个 MCU 中以降低复杂性,充分满足高级伺服驱动器、太阳能中央逆变器以及工业不间断电源 (UPS) 等需要实时信号分析的应用需求。

推荐帖子

【TI首届低功耗设计大赛】初识MSP430FR5969 LaunchPad
板子到了有几天了,工作太忙学习时间不多,先发几张刚收到的照片 收到之后插上USB线,发现电脑提示串口驱动没有 调试驱动都没有,悲剧,在网上查了很久,经过了几天的努力才解决一个串口驱动,debug 接口驱动一直找不到,我之前一直没有安装360,是个人对360实在没有好感,看到有人的解决办法是装360,用360来修复系统,结果试了一下,真的搞好了,看来360还是不错的啊,然后就是选择工具软件了,工具...
lilong8470 微控制器 MCU
TMS320C2x、-'C2xx或-'C5x DSP与8位引导区EPROM的接口
TMS320C2x、-'C2xx或-'C5x DSP与8位引导区EPROM的接口 ...
fish001 微控制器 MCU
msp430f5529 I2C求助
小弟用P3.5和P3.6模拟I2C总线,但是得不出正确的波形,大佬们能指点一下吗?程序和波形图如下: void IICstart() {     P3OUT|=BIT5;//先保证SDA数据总线为高,保证在时钟信号为高的前提下以便于变低     _NOP();     _NOP();     _NOP();...
hxm3213 微控制器 MCU
我的数控电源基本完成
由于工作比较忙!基本能实现功能,精度及稳定性有待提高 1,应该是811把计算好的电压,电流值发送给PC或就地LCD上显示,可是我现在都是在PC或在程序里手动添加个系数进去的 2,板子连接比较多,导致壳体里安不下所有的板子了,计划下次有空,画个PCB做个出来 3,没有很好的发挥811的外围功能。   现在上传资料与大家分享下!有不足的地方请大家指出来!   原理图 ...
蓝雨夜 微控制器 MCU

luck_gfb

电机驱动的软件还是很复杂的。也就是说 你用我们的技术 你不需要做很多的操作调整 重新标定啊等等这些工作 只需要将我们的板子连接到电机 在10分钟内 可以让我们的电机转起来 而且这是无传感的技术 InstaSPIN TM motion是有传感的 会带给编码器的 我们会将速度网和[听不清]结合成一个环路 用IDC控制起来做 它的性能比较高端 而且只需要调整一个参数就可以了。

2020年09月02日 17:07:38

hawkier

哈哈哈,学完这章要点时间啊

2019年11月21日 16:12:10

大明58

学习C2837x入门指南

2019年08月22日 12:32:36

zhangleiat185

好好学习天天向上。。

2019年07月12日 16:34:47

hellokt43

好好学习天天向上。。

2019年06月09日 11:05:30

dingxilindy

学习C2000开发所需软件工具

2019年05月16日 14:51:31

zx1988ZX

终于看完了,不错的!

2019年04月25日 06:53:06

wudianjun2001

不错的视频资料。。。。。。

2019年03月04日 10:15:26

59477cq

学习了

2019年01月21日 20:28:50

凤凰息梧桐

学习一下

2019年01月21日 17:28:12

分享到X
微博
QQ
QQ空间
微信

EEWorld订阅号

EEWorld服务号

汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新文章 手机版

站点相关: EEWORLD首页 EE大学堂 论坛 下载中心 Datasheet 活动专区 博客

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved