并行FLASH引导的一点经验》及本站其它信息均来自网络!
行业新闻技术文章解决方案电路图产品库厂商库供应信息求购信息外刊文摘
 技术文章 -> PCB电源单片机DSP设备与仪器EDA放大/转换存储器嵌入式接口与连接通讯与网络模拟技术其它技术文章
 解决方案 -> 汽车电子光电与显示测试测量计算机与外设仪器仪表通讯与网络视像设备消费电子工业控制其它解决方案
 产 品 库 -> 存储器嵌入式单片机电源通讯网络接口电路DSP视频音频EDA/PLD显示光电电测仪表传感与控制其它产品
 首页 -> 技术文章 -> DSP -> 正文

并行FLASH引导的一点经验

最近BBS上关于FLASH和BOOT的讨论很活跃,我也多次来此请教。前几天自制的DSP板引导成功,早就打算写写这方面的东西。这两天忙着在上海找工作,工资低,又多次被拒,心力憔悴,所以一直拖到了今天。 我用的DSP是5416,以其为核心,做了一个相对独立的子系统(硬件、软件、算法),目前都已基本做好。 下面把在FLASH引导方面做的工作向大家汇报一下,希望能对大家有所帮助。本人经验和文笔都有限,写的不好请大家谅解。 硬件环境: DSP:TMS320VC5416PGE160 FLASH:SST39VF400A-70-4C-EK 都是贴片的,FLASH映射在DSP数据空间的0x8000-0xFFFF 软件环境: CCS v2.12.01 主程序(要烧入FLASH的程序): DEBUG版,程序占用空间0x28000-0x2FFFF(片内SARAM),中断向量表在0x0080-0x00FF(片内DARAM),数据空间使用0x0100-0x7FFF(片内DARAM)。 因为FLASH是贴片的,所以需要自己编一个数据搬移程序,把要主程序搬移到FLASH中。在写入FLASH数据时,还应写入引导表的格式数据。最后在数据空间的0xFFFF处写入引导表的起始地址(这里为0x8000)。 搬移程序: DEBUG版,程序空间0x38000-0x3FFFF(片内SARAM),中断向量表在0x7800-0x78FF(片内DARAM),数据空间使用0x5000-0x77FF(片内DARAM)。 搬移程序不能使用与主程序的程序空间和中断向量表重合的物理空间,以免覆盖。 烧写时,同时打开主程序和搬移程序的PROJECT,先LOAD主程序,再LOAD搬移程序,然后执行搬移程序,烧写OK! 附:搬移程序(仅供参考) volatile unsigned int *pTemp=(unsigned int *)0x7e00; unsigned int iFlashAddr; int iLoop; /* 在引导表头存放并行引导关键字 */ iFlashAddr=0x8000; WriteFlash(iFlashAddr,0x10aa); iFlashAddr++; /* 初始化SWWSR值 */ WriteFlash(iFlashAddr,0x7e00); iFlashAddr++; /* 初始化BSCR值 */ WriteFlash(iFlashAddr,0x8006); iFlashAddr++; /* 程序执行的入口地址 */ WriteFlash(iFlashAddr,0x0002); iFlashAddr++; WriteFlash(iFlashAddr,0x8085); iFlashAddr++; /* 程序长度 */ WriteFlash(iFlashAddr,0x7f00); iFlashAddr++; /* 程序要装载到的地址 */ WriteFlash(iFlashAddr,0x0002); iFlashAddr++; WriteFlash(iFlashAddr,0x8000); iFlashAddr++; for (iLoop=0;iLoop<0x7f00;iLoop++) { /* 从程序空间读数据,放到暂存单元 */ asm(" pshm al"); asm(" pshm ah"); asm(" rsbx cpl"); asm(" ld #00fch,dp"); asm(" stm #0000h, ah"); asm(" MVDM _iLoop, al"); asm(" add #2800h,4,a"); asm(" reada 0h"); asm(" popm ah"); asm(" popm al"); asm(" ssbx cpl"); /* 把暂存单元内容写入FLASH */ WriteFlash(iFlashAddr,*pTemp); iFlashAddr++; } /* 中断向量表长度 */ WriteFlash(iFlashAddr,0x0080); iFlashAddr++; /* 中断向量表装载地址 */ WriteFlash(iFlashAddr,0x0000); iFlashAddr++; WriteFlash(iFlashAddr,0x0080); iFlashAddr++; for (iLoop=0;iLoop<0x0080;iLoop++) { /* 从程序空间读数据,放到暂存单元 */ asm(" pshm al"); asm(" pshm ah"); asm(" rsbx cpl"); asm(" ld #00fch,dp"); asm(" stm #0000h, ah"); asm(" MVDM _iLoop, al"); asm(" add #0080h,0,a"); asm(" reada 0h"); asm(" popm ah"); asm(" popm al"); asm(" ssbx cpl"); /* 把暂存单元内容写入FLASH */ WriteFlash(iFlashAddr,*pTemp); iFlashAddr++; } /* 写入引导表结束标志 */ WriteFlash(iFlashAddr,0x0000); iFlashAddr++; WriteFlash(iFlashAddr,0x0000); /* 在数据空间的0xFFFF写入引导表起始地址 */ iFlashAddr=0xffff; WriteFlash(iFlashAddr,0x8000);
()
Google
 >> 最近更新
 • 如何决定选用干膜或湿膜,及两者优点与缺点的分
 • PCB线路板 怎样清洁才算是足够清洁
 • 从专利角度探讨Sn-Zn无铅焊料研究现状
 • 双极性集成电路的ESD保护
 • 蚀刻液循环再生机可实现清洁生产
 • 环境与静电对集成电路封装过程的影响
 • 湿式制程与PCB表面处理
 • 有机保焊与废水、气处理
 • 覆铜板用环氧玻璃纤维布含浸性改善
 • 手机应用领域的印刷线路板表面处理新趋势
 • 焊盘的基本概念及其有关的行业标准
 • 如何对付SMT的上锡不良
 • 表面贴装焊接的不良原因和防止对策
 • 无铅焊接工艺的五个步骤
 • 无铅焊接技术中的测试和检测问题
 • SMT生产工艺流程
 • 在波峰焊接优化中的关键参数
 • SMT混装时通孔回流焊接技术
 • SMT无铅工艺对无铅锡膏的几个要求
 • 贴片胶与滴胶工艺
Copyright © 2005-2008 555DZ.com 联系站长:55dz@163.com