TMS320C6722的Parallel Flash启动

本文详细记录了TMS320C6722 DSP使用Parallel Flash启动的调试过程,包括配置GPIO扩展地址线、启动模式解析、二次bootloader的编写及其注意事项。在调试过程中,作者遇到并解决了如地址线配置、ROM启动程序的特殊要求等问题,以帮助其他开发者避免类似困扰。
摘要由CSDN通过智能技术生成

序:

      最近在调试TMS320C6722的Parallel Flash启动,大约调了两周左右(中间因为找不出错误原因,断了几天),最后调试成功。关于DSP的资料,网上多是关于2812和28335等C2000系列。关于C6000系列,C6713较多一些。所以在这里将C6722的调试过程以及中间遇到的一些问题写下来,希望能够为调试C6722的朋友们提供些帮助。

        首先,说下我这里的配置:DSP主芯片为TMS320C6722, FLASH为:SST39VF6401,4M16

        因为6722的EMIF地址线只有14根(EM_BA0、EM_BA1、EM_A0~A11),所以要想要想寻址更多的内容,需要6722的GPIO来扩展。在这里,用的是McASP0 AXR的0~4和10~13总共9根GPIO。总共23根地址线,能够寻址2^23=8M,与flash的4M2=8M相对应。因为flash的每个内存单元为16位,而DSP得每个内存单元为8位,所以要将6722的EM_BA1连接flash的最低位地址线A0。

        如果绕不过来,可以参考一下这个链接:http://wenku.baidu.com/link?url=55Z5UcY8VwCYmbtGqej6jOQruMbJC39yqY-C2uJoYJcQQQdFKVCm48W-DNCIaZxREzBdxflDcS54UX_BDHPYWNp_n_VDkRtIZDWqqgaCtHG     虽然不是嵌入式的内容,但道理是相通的。

一、简述6722的启动过程

        上电后,从0x0000 0000开始运行,CFGPIN0和CFGPIN1两个寄存器会在的上升沿捕获相关引脚的状态(高电位为1,低电位为0),跟启动模式有关的引脚有四个,SPI0的SIMO、SOMI、CLK以及UHPI_HCS,因为6722没有UHPI模块,所以对于6722来说跟启动模式有关的引脚有3个。虽然6722没有UHPI模块,在仿真器状态下查看6722的寄存器,UHPI_HCS始终为1。

                      

        参考文献:SPRS370E,  P16~18

        检测到dsp的启动模式后,在Parallel Flash模式下,它会读取flash的第一个字节的最低两位(这个地方是672x与其它系列不同的地方),也就是0x9000 0000的内容,来确定是8位模式还是16位模式(8位8位的copy,还是16位16位的copy),然后将flash前1k的数据copy到dsp内存以0x1000 0000为起始地址的地方。到这个地方为止,都是DSP自己运作的,不需要人工介入,这段程序是出厂时就固化到6722的ROM里的。接下来就需要人工介入了。copy到dsp内存的1K数据,除了第一个字(32位)外,剩余的代码就是用户自己编写的二次bootloader。ROM copy  1k数据到dsp内存的过程为一次bootloader。然后二次bootloader的作用就是将用户代码从flash0x9000 0400的位置copy到内存RAM里0x1000 0400的位置。

                  

        参考文献:SPRAA69D,P5

二、二次bootloader

        接下来就是写二次bootloader。因为运行二次bootloader时,c语言环境还没建立起来,所以必须用汇编来写。

        内容包含下面几部分:1.配置PLLC;2.配置EMIF;3.copy代码,从0x9000 0400到0x1000 0400;4.跳转到_c_int00

        附上二次bootloder代码:

        


;*************environment:TMS320C6722*********
;*************time:2016/08/07*****************
;*************author:LXD_BUAA**********************

                .title "flash boot"

;address of the generated boot table
user_size       .equ  0x00003468  ;refer to the .map file
user_ld_start   .equ  0x90000400  ;the start location of user's codes  loaded in flash
user_rn_start   .equ  0x10000400  ;the start location of user's codes  run in ram

CFGBRIDGE       .equ  0x40000024  ;Controls Reset Of The Bridge BR2. Must Assert RESET After PLL Changed & Must Release Before dMAX/UHPI Acesse

PLLCSR		    .equ  0x41000100	;PLL Control/status Register Address
PLLM			.equ  0x41000110	;PLL Multiplier Control Register Address
PLLDIV0		    .equ  0x41000114	;PLL Controller Divider0 Register Address
PLLDIV1		    .equ  0x41000118	;PLL Controller Divider1 Register Address
PLLDIV2		    .equ  0x4100011C	;PLL Controller Divider2 Register Address
PLLDIV3		    .equ  0x41000120	;PLL Controller Divider3 Register Address
PLLCMD		    .equ  0x41000138	;PLL Control Command Register Address
PLLSTAT		    .equ  0x4100013C	;PLL Controller Status Register Address
ALNCTL		    .equ  0x41000140	;PLL Clock Align Control Register Address

A1CR            .equ  0xF0000010    ;The Register Accouting For EMIF FLASH Device

MCASP0_PFUNC     .equ  0x44000010    ;Pin function register
MCASP0_PDIR      .equ  0x44000014    ;Pin direction register
MCASP0_PDOUT     .equ  0x44000018    ;Pin data output register
MCASP0_PDSET     .equ  0x4400001C    ;To change a pin from 0 to 1 if corresponding pin is configured as GPIO
MCASP0_PDCLR     .equ  0x44000020    ;To change a pin from 1 to 0 if corresponding pin is configured as GPIO


                .sect ".boot_load"
                .global _boot

                .ref  _c_int00

_boot:
;***************
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值