TIDM368 IPNC执行reboot后不能启动:
Sending all processes the KILL signal... Done. #这是执行reboot
Starting reboot command: reboot
Rebooting...
Restarting system.
.
DM36x initialization passed!
TI UBL Version: 1.50
Booting Catalog Boot Loader
BootMode = NAND
Starting NAND Copy... #将程序从FLASH拷贝到DDR RAM中运行。
Valid magicnum, 0xA1ACED66, found in block 0x00000008.
DONE
Jumping to entry point at 0x81080000.
DM368_IPNC_UBL_1.0.0
U-Boot 1.3.4 (Dec 16 2010 - 21:38:22) DM368-IPNC-1.0.0 #交权给uboot
I2C: ready
DRAM: 128 MB
NAND: NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bit)
TTTTTTTTTTTTTTTTEDMA_Read8 timeout!! #timeout发生在copy的过程中,这表明是u-boot init NAND flash有问题。
TTTTTTTTTTTTTTTTEDMA_Read8 timeout!!
Bad block table not found for chip 0
Bad block table found at page 65408, version 0x01
Bad block table written to 0x07fe0000, version 0x01
128 MiB
TTTTTTTTTTTTTT
第一次的对策由TI的第三方Appro公司的的george给出:
他的建议是:正常的reboot程序,請參考
ipnc_app/network/boa-0.94.13/src/appro_api.c 中的 void restart_ipcam(.....){} 的寫法
關於reboot_ipnc,可以參照上述function
自行修改 ipnc_app/interface/src/reboot_ipnc.c
我把code paste here
void restart_ipcam(void)
{
char cmd[64];
int dev_fp;
void *pMem_map;
unsigned long phyAddr= 0x01C41000;
unsigned long length = 0xAE0;
unsigned int *pPSCCtrl = NULL;
unsigned int *pPTCMD = NULL;
if ((dev_fp=open("/dev/mem",O_RDWR|O_SYNC))==-1)
return ;
}
pMem_map=mmap((void *)phyAddr,length,PROT_READ|PROT_WRITE|PROT_EXEC,MAP_SHARED, dev_fp,phyAddr);
if (pMem_map!=(void *)phyAddr)
pPTCMD = (unsigned int *)( (char *)pMem_map+0x120);
pPSCCtrl = (unsigned int *)( (char *)pMem_map+0xA00);
//EDMA
*(pPSCCtrl+0) = 2;
*pPTCMD = 1;
usleep(5000);
*(pPSCCtrl+1) = 2;
*(pPSCCtrl+2) = 2;
*(pPSCCtrl+3) = 2;
*(pPSCCtrl+4) = 2;
//VPSS
*(pPSCCtrl+47) = 2;
//MJCP
*(pPSCCtrl+50) = 2;
//HDVICP
*(pPSCCtrl+51) = 2;
if( pMem_map )
munmap(pMem_map, length);
if( dev_fp >= 0)
close(dev_fp);
sprintf(cmd, "/sbin/shutdown -r now");
system(cmd);
return;
从程序来看,只是做了一个munmap的动作,似乎多此一举。而且,我实测的结果是,这样可能会导致reboot根本无法成功,就是说,reboot都无法用了。
对策二:用watchdog来复位。
实测的结果是:30次会发生约1次不成功,也就是说,仍然有机率复位不成功。
It looks like you are using very old version of UBL, uboot and system code.
we had fixed this hanging DMA issue in later version.can you please migrate to latest version
please check with Appro for downalod or software upgradees
Regards,
Raghu
Please mark this reply as Verify Answer on this post if it answers the question.
I updated to ipnc ubl 2.1.0 + u-boot 1.0(the uboot is same as previous ipnc 2.0), the emda_timeout iusse seems fix, but ubl hangup with watchdog reset. Following is the log,
TI UBL Base Version: 1.50
Boot Loader BootMode = NAND
Starting NAND Copy... # hangup there
Normal boot log is
DM36x initialization passed! # normal TI UBL Base Version: 1.50 Boot Loader BootMode = NAND Starting NAND Copy... Valid magicnum, 0xA1ACED66, found in block 0x00000008. Boot Mode Task Completed
IPNC UBL Version: 2.1.0 Platform: DM368-432
Jumping to entry point at 0x81080000
U-Boot 1.3.4 (Apr 20 2010 - 11:42:44) DM368-IPNC-1.0.0
...............................