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.

OMAP-L138 怎样通过UART把u-boot下载到DDR空间?不是烧写到flash中

Other Parts Discussed in Thread: OMAP-L138

  场景:自己画的板子,OMAP-L138,通过硬件测试发现:NAND FLASH和网口都有问题,也就是说UBL和U-BOOT都不能烧写到NAND FLASH中,并且不能使用网络服务(TFTP、NFS)。所以考虑用UART启动方式,用“UART Boot Host Utility”这个工具把UBL(AIS格式)下载到Shared RAM空间。接着,按大家所说,应该是UBL从串口读取U-BOOT到DDR空间,并跳转到该地址运行U-BOOT。

问题:用什么工具把U-BOOT下载到DDR空间?

下面是UBL源码从串口读取U-BOOT的相关函数:

static Uint32 LOCAL_recvHeaderAndData(UARTBOOT_HeaderHandle ackHeader)

 {

   Uint32 error = E_FAIL, recvLen;

 

   // Recv ACK command

   error = UART_checkSequence("    ACK", TRUE);

   if(error != E_PASS)

   {

     return E_FAIL;

   }

 

   // Get the ACK header elements

   error =  UART_recvHexData( 4, (Uint32 *) &(ackHeader->magicNum)     );

   error |= UART_recvHexData( 4, (Uint32 *) &(ackHeader->startAddr) );

   error |= UART_recvHexData( 4, (Uint32 *) &(ackHeader->byteCnt)  );

   error |= UART_checkSequence("0000", FALSE);

   if(error != E_PASS)

   {

     return E_FAIL;

   }

 

   // Verify that the data size is appropriate

   if((ackHeader->byteCnt == 0) || (ackHeader->byteCnt > APP_IMAGE_SIZE))

   {

     LOCAL_sendSequence(" BADCNT");  // trailing /0 will come along

       return E_FAIL;

   }

 

   // Verify application start address is in RAM (lower 16bit of appStartAddr also used 

   // to hold UBL entry point if this header describes a UBL)

   if( (ackHeader->startAddr < DEVICE_DDR2_START_ADDR) || (ackHeader->startAddr > DEVICE_DDR2_END_ADDR) )

   {

     LOCAL_sendSequence("BADADDR");  // trailing /0 will come along

     return E_FAIL;

   }

 

   // Send BEGIN command

   if (LOCAL_sendSequence("  BEGIN") != E_PASS)

     return E_FAIL;

 

   // Receive the data over UART

   recvLen = ackHeader->byteCnt;

   error = UART_recvStringN((String)(ackHeader->loadAddr), &recvLen, FALSE );

   if ( (error != E_PASS) || (recvLen != ackHeader->byteCnt) )

   {

     DEBUG_printString("\r\nUART Receive Error\r\n");

     return E_FAIL;

   }

 

   // Return DONE when all data arrives

   if ( LOCAL_sendSequence("   DONE") != E_PASS )

     return E_FAIL;

 

   return E_PASS;

 }

 

很明显,UBL在从串口接收数据(U-BOOT),那么是谁发给它的呢?

另外,在NAND FLASH 和 网口 都挂掉的情况下,有没有可能移植 kernel 和 文件系统呢?