有人能提供一下6748单核的nand启动说明和程序例程吗,还有AIS数据格式说明,nand启动不需要编写二次boot吧,关于nand启动能详细介绍一下逻辑吗,谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
有人能提供一下6748单核的nand启动说明和程序例程吗,还有AIS数据格式说明,nand启动不需要编写二次boot吧,关于nand启动能详细介绍一下逻辑吗,谢谢
你好,
1. 如果你的nand flash device 不在下面文档第30页上的Table 12. List of Supported NAND Devices列表里, 说明ROM bootloader支持, 不需要二次boot, 否则, 需要先从别的boot mode把二次boot加载运行, 再去boot nand flash中的应用程序.
http://www.ti.com/lit/an/spraat2e/spraat2e.pdf
2. ais数据格式说明, 可以参考上面的文档第4 Application Image Script (AIS) Boot章
3. nand flash boot的详细介绍, 可以参考下面的wiki网站.
http://processors.wiki.ti.com/index.php/Davinci/Sitara/Integra_Nand_Boot_FAQ
4. 我们有提供nand flash烧写工具, 通过串口或者通过ccs.
https://sourceforge.net/projects/dvflashutils/files/OMAP-L138/v2.40/
http://processors.wiki.ti.com/index.php/Serial_Boot_and_Flash_Loading_Utility_for_OMAP-L138
谢谢的你的回答,现在还有有点疑惑,
1. 如果你的nand flash device 不在下面文档第30页上的Table 12. List of Supported NAND Devices列表里, 说明ROM bootloader支持, 不需要二次boot, 否则, 需要先从别的boot mode把二次boot加载运行, 再去boot nand flash中的应用程序. http://www.ti.com/lit/an/spraat2e/spraat2e.pdf
现在我用的nandflash型号:K9F4G08U0A,具有4096个block,每个page为2048+64,共有4Gbit,不在列表中,也就是这个nandflash不能利用dsp固有的bootloader来加载启动应用程序是吗,必须通过其他的bootloader来加载二次bootloade,然后在加载应用程序啊吗
还有文档中提到的fourth ID byte是什么意思,在哪里体现出来,这个字节应该放在那里。
我看了一下K9F4G08U0A数据手册, 它的4th ID符合c6748 bootloader文档上Table 13. Expected Contents of Fourth ID Byte for NAND Devices Listed in Table 12 With Sizes Greater Than 128 MB, 所以C6748 RBL支持这款NAND flash.
Nand flash有个READ ID (0x90 at Address 0x00, 当RBL往nand flash地址0写0x90后, 会返回5个bytes, 其中第四个byte包含了NAND flash的page size, block size等信息, RBL通过4th ID判断是否支持该款NAND flash. 我之前发的wiki网站上关于如何判断RBL是否支持NAND flash有详细的介绍, 请仔细看一下.
http://processors.wiki.ti.com/index.php/Determining_compatibility_between_ROM_Bootloader_(RBL)_and_Raw_NAND_devices
很感谢你的回答,我按着方法把我的应用程序烧到nandflash中,可是不能运行。不知道什么原因,我把烧写的方法说一下,看看有什么问题没有。
1,应用程序在仿真器下运行是没问题的,其实程序很简单, 就是点亮一个指示灯。通过io口。放着运行没问题,并且应用程序配额制psc和pll还有io口。
2、通过aisgen把生成的。out文件转换为ais文件,其中aisgn中选择nandflash,地址为0x62000000,没有配置其他的,只是配置了pinmux,按着nandflash的引脚进行配置,其中配置pinmux和没有pinmux配置,都做过实验,烧到nandflash中都不能运行。
3、通过仿真的形式,把。ais文件烧写到block1中,并且读出来跟ais文件一样,没有错误。
4、把bootpin的引脚配置为00001110,然后重新上电,不能启动。 我不知道这样还有什么问题没有,其中nandflash用的是三星的K9F4G08U0B,读出里面的ID为dev_id[0]: 0xEC dev_id[1]: 0xDC dev_id[2]: 0x10 dev_id[3]: 0x95 dev_id[4]: 0x54 。第四个为0x95不知道是不是满足RBL。
电路板是SEED_DEC138的开发板,把之前的L138更换为DSP6748,硬件NAND的CS为CS3,0x62000000是没错了,因为我在写nand和读nand的时候都是操作的0x62000000.
还是没有搞定啊,烧进去不能启动,程序很简单,就是一个IO口输出一个高低电平。程序
主程序:
void main(void)
{
u16 i;
EVMOMAPL138_init(); //初始化psc与pll
interrupt_init(); //禁止所有中断
GPIO_Init(); //初始化io口
i=0;
while(1)
{
i=0;
i++;
GPIO_BANK67->OUT_DATA &= 0xFFFFDFFF; //0
GPIO_BANK67->OUT_DATA |= 0x00002000; //1
i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
GPIO_BANK67->OUT_DATA &= 0xFFFFDFFF; //0
if(i>20) i=0;
for(i=0;i<10000;i++);
}
}
intvecs.asm程序如下:
; Global symbols defined here and exported out of this file
.global _intcVectorTable
.global _c_int00
.global _vector1 ;nmi
.global _vector2 ;
.global _vector3
.global _vector4
.global _vector5
.global _vector6
.global _vector7
.global _vector8
.global _vector9
.global _vector10
.global _vector11
.global _vector12
.global _vector13
; This is a macro that instantiates one entry in the interrupt service table.
VEC_ENTRY .macro addr
STW B0,*--B15
MVKL addr,B0
MVKH addr,B0
B B0
LDW *B15++,B0
NOP 2
NOP
NOP
.endm
; This is a dummy interrupt service routine used to initialize the IST.
_vec_dummy:
B B3
NOP 5
; This is the actual interrupt service table (IST).
.sect ".vecs"
.align 1024
_intcVectorTable:
_vector0: VEC_ENTRY _c_int00 ;RESET
_vector1: VEC_ENTRY _vec_dummy ;NMI
_vector2: VEC_ENTRY _vec_dummy ;RSVD
_vector3: VEC_ENTRY _vec_dummy ;RSVD
_vector4: VEC_ENTRY _vec_dummy ;isr0
_vector5: VEC_ENTRY _vec_dummy ;isr1
_vector6: VEC_ENTRY _vec_dummy ;isr2
_vector7: VEC_ENTRY _vec_dummy ;isr3
_vector8: VEC_ENTRY _vec_dummy
_vector9: VEC_ENTRY _vec_dummy
_vector10: VEC_ENTRY _vec_dummy
_vector11: VEC_ENTRY _vec_dummy
cmd文件
-l rts67plus.lib
-stack 0x00000800 /* Stack Size */
-heap 0x00000800 /* Heap Size */
MEMORY
{
DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 Internal ROM */
DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 Internal RAM */
DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 Internal Program RAM */
DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 Internal Data RAM */
SHDSPL2ROM o = 0x11700000 l = 0x00100000 /* 1MB L2 Shared Internal ROM */
SHDSPL2RAM o = 0x11800000 l = 0x00040000 /* 256kB L2 Shared Internal RAM */
SHDSPL1PRAM o = 0x11E00000 l = 0x00008000 /* 32kB L1 Shared Internal Program RAM */
SHDSPL1DRAM o = 0x11F00000 l = 0x00008000 /* 32kB L1 Shared Internal Data RAM */
EMIFACS0 o = 0x40000000 l = 0x20000000 /* 512MB SDRAM Data (CS0) */
EMIFACS2 o = 0x60000000 l = 0x02000000 /* 32MB Async Data (CS2) */
EMIFACS3 o = 0x62000000 l = 0x02000000 /* 32MB Async Data (CS3) */
EMIFACS4 o = 0x64000000 l = 0x02000000 /* 32MB Async Data (CS4) */
EMIFACS5 o = 0x66000000 l = 0x02000000 /* 32MB Async Data (CS5) */
SHRAM o = 0x80000000 l = 0x00020000 /* 128kB Shared RAM */
DDR2 o = 0xC0000000 l = 0x20000000 /* 512MB DDR2 Data */
}
SECTIONS
{
.text > SHRAM
.stack > SHRAM
.bss > SHRAM
.cio > SHRAM
.const > SHRAM
.data > SHRAM
.switch > SHRAM
.sysmem > SHRAM
.far > SHRAM
.args > SHRAM
.ppinfo > SHRAM
.ppdata > SHRAM
.vecs > SHRAM
/* COFF sections */
.pinit > SHRAM
.cinit > SHRAM
/* EABI sections */
.binit > SHRAM
.init_array > SHRAM
.neardata > SHRAM
.fardata > SHRAM
.rodata > SHRAM
.c6xabi.exidx > SHRAM
.c6xabi.extab > SHRAM
}
关于生成bin文件时,用不用配置pll0, psc与pinmux等啊, 我程序里都配置了这些, 具体配置这些在什么时候用到,那一步用到了,能简单说明一下吗?
现在cs3 setup 为0x3FFFFFFC。烧到第一块nandflash中,不能启动。
还有关于6748单核的例程,最好简单一点的,给我一个例程最好。谢谢。因为ti官网很多,里面很多文件那些有用那些没用,都能不好。
谢谢
aisgen工具对外设的这些配置是在bootloader加载程序前, 先根据aisgen生成的bin件中对外设寄存器的配置值去初始化外设后再加载程序, 如配置pll0可以加速加载速度, 配置DDR, 可以把程序加载到片外DDR, 这些你都可以仔细看一下bootloader文档找到答案.
"烧到第一块nandflash中"是block1还是block0?
你用仿真器跟过bootloader吗? 跟一下看程序是没搬进来还是搬进来后没正确执行?