微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Uboot在S3C2440上的移植详解(二)

Uboot在S3C2440上的移植详解(二)

时间:11-09 来源:互联网 点击:

flash_info[i].start[j]= flashbase + j * MAIN_SECT_SIZE;
}

//修改flash_print_info函数如下:

case(AMD_MANUFACT & FLASH_VENDMASK):
printf("AMD: ");
break;
case(SST_MANUFACT & FLASH_VENDMASK)://添加SST39VF1601的
printf("SST:");
break;

case(AMD_ID_LV800B & FLASH_TYPEMASK):
printf("1x Amd29LV800BB (8Mbit)\n");
break;
case(SST_ID_xF1601 & FLASH_TYPEMASK)://添加SST39VF1601的
printf("1x SST39VF1610 (16Mbit)\n");
break;

//修改flash_erase函数如下:
//if ((info->flash_id & FLASH_VENDMASK) !=
// (AMD_MANUFACT & FLASH_VENDMASK)) {
// return ERR_UNKNOWN_FLASH_VENDOR;
//}
if((info->flash_id & FLASH_VENDMASK)!=
(SST_MANUFACT & FLASH_VENDMASK)){
return ERR_UNKNOWN_FLASH_VENDOR;
}

///* wait until flash is ready */
//chip = 0;
//do {
// result = *addr;
// /* check timeout */
// if (get_timer_masked () >
// CONFIG_SYS_FLASH_ERASE_TOUT) {
// MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
// chip = TMO;
// break;
// }

// if (!chip
// && (result & 0xFFFF) & BIT_ERASE_DONE)
// chip = READY;

// if (!chip
// && (result & 0xFFFF) & BIT_PROGRAM_ERROR)
// chip = ERR;
//} while (!chip);

//MEM_FLASH_ADDR1 = CMD_READ_ARRAY;

//if (chip == ERR) {
// rc = ERR_PROG_ERROR;
// goto outahere;
//}

//if (chip == TMO) {
// rc = ERR_TIMOUT;
// goto outahere;
//}
while(1)
{
if((*addr & 0x40)!=(*addr & 0x40))
continue;

if(*addr & 0x80)
{
rc = ERR_OK;
break;
}
}

//修改write_hword函数如下:
MEM_FLASH_ADDR1 = CMD_UNLOCK1;
MEM_FLASH_ADDR2 = CMD_UNLOCK2;
//MEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;
MEM_FLASH_ADDR1 = CMD_PROGRAM;
//*addr = CMD_PROGRAM;
*addr = data;

///* wait until flash is ready */
//chip = 0;
//do {
// result = *addr;
// /* check timeout */
// if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
// chip = ERR | TMO;
// break;
// }

// if (!chip && ((result & 0x80) == (data & 0x80)))
// chip = READY;

// if (!chip && ((result & 0xFFFF) & BIT_PROGRAM_ERROR)) {
// result = *addr;

// if ((result & 0x80) == (data & 0x80))
// chip = READY;
// else
// chip = ERR;
// }
//} while (!chip);

//*addr = CMD_READ_ARRAY;

//if (chip == ERR || *addr != data)
// rc = ERR_PROG_ERROR;
while(1)
{
if((*addr & 0x40)!=(*addr & 0x40))
continue;

if((*addr & 0x80)==(data & 0x80))
{
rc = ERR_OK;
break;
}
}

修改完后重新编译u-boot,下载到RAM中运行结果如下图:

从运行结果图看,Nor Flash的大小可以正确检测到了,命令行前面的名字也由原来的SMDK2410改成我自己定义的[MY2440]了,但是还会出现bad CRC的警告信息,其实这并不是什么问题,只是还没有将环境变量设置到Nor Flash中,我们执行一下u-boot的:saveenv命令就可以了。如下图:

再重新下载u-boot.bin文件到RAM中运行,可以观察到不会出现警告信息了,这时候u-boot已经对我们开发板上的Nor Flash完全支持了。如下:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top