Hi Rudy,

I am using windows program which will connect to davinci and downloads the
U-BOOT (u-boot_ram.bin) binary file.
I have attached Windows program for your reference.
I get this following log on the console. Can you please let me know if i am
doing something wrong.
---------------------------------------------------------
è#one«
╥boot->timed out

D:\uart_booting\uart\exe>win_flash.exe r-boot.bin 1
read 14336 bytes from r-boot.bin
Waiting for boot message from Davinci
. BOOTME
sending ACK
Waiting for begin message from Davinci
  BEGINsending empty CRC table
Waiting for done message from Davinci
   DONESending data
Waiting for done message from Davinci
   DONEWaiting for UBL message from Davinci
ee
Rboot->uboot size is 262156 bytes
**********************************************************
****************************************************
lDone.ìè#
╥boot->timed out
D:\uart_booting\uart\exe>
----------------------------------------------------------------------------------------------------------
*On Hyper terminal i get and hangs after i press  < u >*
 Òboot->¿
Rudy's Wonderful UBL.
d  - Display Memory
l  - Load Program/Data
g  - Goto Address
z  - Reset
u  - Start U-Boot

Rboot->u BOOTME BOOTME BOOTME BOOTME BOOTME BOOTME.
---------------------------------------------------------------------------------------------------------------------

Thanks and Regards,
Aleem



On 5/2/07, Rudy Reinsch <[EMAIL PROTECTED]> wrote:

 Hello
The r-boot UBL should be used in conjunction with a suitable program
(usually
running on a PC) that connects to the davinci and downloads the code (e.g.
U-BOOT)
and also provides some terminal emulation.
You should look through previous posts referring to UART UBL UBOOT etc.formore 
details.

Cheers
Rudy.


 ------------------------------
*From:* [EMAIL PROTECTED] [mailto:
[EMAIL PROTECTED] *On Behalf Of *aleem
shariff
*Sent:* 02 May 2007 09:04
*To:* davinci-linux-open-source@linux.davincidsp.com
*Subject:* Problem with Uart Booting


 Hi,

I have tried TI's Document SPRAAI0 & SPRAAI4  & Downloaded code
spraai4.zip it did not help me much.
when i referred forum it got me going with Ruby's boot loader.
Thanks to Ruby i am able to download u-boot image.
But when i try to  start u-boot with command < u >
on the console i get BOOTME BOOTME......
Can any one help me who have already worked on Uart boot.
any suggestions will be appreciated.


-------------------------------------------------------------------------------
D:\uart_booting\uart\exe>win_flash.exe r-boot.bin 1
read 14336 bytes from r-boot.bin
Waiting for boot message from Davinci
. BOOTME
sending ACK
Waiting for begin message from Davinci
   BEGINsending empty CRC table
Waiting for done message from Davinci
    DONESending data
Waiting for done message from Davinci
    DONEWaiting for UBL message from Davinci
eσì
Rboot->uboot size is 107484 bytes

********************************************************************************
lDoεe.
#
Rboot-╛timed out

D:\uart_booting\uart\exe>
D:\uart_booting\uart\exe>

---------------------------------------------------------------------------------

Òboot->¿
Rudy's Wonderful UBL.
d  - Display Memory
l  - Load Program/Data
g  - Goto Address
z  - Reset
u  - Start U-Boot

Rboot->u BOOTME BOOTME BOOTME BOOTME BOOTME BOOTME



Thanks in advance,

Aleem

________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________


//-----------------------------------------------------------------------------
// File load.c
// Load UBL to davinci over UART 
// Win32 console application 
// (c) 2005 G&W Instruments 
//-----------------------------------------------------------------------------

#include <windows.h>
#include <stdio.h>
#include <time.h>

#define MAX_UBL_SIZE (14*1024) 

static HANDLE DevHandle = INVALID_HANDLE_VALUE ;

//---------------------------------------------------------------------------
int OpenCom(int portnum)
{
    char portname[12] ; // 10 shall do ...
        const int RxQueueSize=4*1024;
        const int TxQueueSize=4*1024;
    int NumWritten ; 
        DCB dcb;
    COMMTIMEOUTS ComTimeouts ; 

    memset(portname, 0, 12) ;
    sprintf(portname,"\\\\.\\COM%d",portnum) ; 

    // open Port 
        DevHandle = CreateFile(portname,
                        GENERIC_READ | GENERIC_WRITE,
                        0,
                        NULL,
                        OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL,
                        0);
    
        if (DevHandle==INVALID_HANDLE_VALUE) {
        printf("CreateFile for %s failed %d\n", portname, GetLastError());
            return 0;
        }

        if (!SetupComm(DevHandle, RxQueueSize, TxQueueSize)) {
        printf("SetupComm failed %d\n", GetLastError());
            CloseHandle(DevHandle);
        DevHandle = INVALID_HANDLE_VALUE ;
            return 0;
        }

        memset(&dcb, 0, sizeof(dcb));
        dcb.DCBlength = sizeof(DCB);

        if (!GetCommState(DevHandle, &dcb)) {
        printf("GetCommState failed %d\n", GetLastError());
            CloseHandle(DevHandle);
        DevHandle = INVALID_HANDLE_VALUE ;
            return 0;
        }
  
        dcb.DCBlength = sizeof(DCB);
        dcb.BaudRate = 115200;              /* Baudrate   */
    dcb.fBinary = 1 ; 
        dcb.fParity  = 0;                   /* Disable parity checking          
*/
        dcb.fOutxCtsFlow = 0 ;                  /* CTS handshaking on output    
   */
        dcb.fOutxDsrFlow = 0;                       /* no SR handshaking on 
output       */
        dcb.fDtrControl  = DTR_CONTROL_DISABLE;     /* DTR off control          
  */
        dcb.fOutX = 0;                          /* Disable output X-ON/X-OFF    
    */
        dcb.fInX  = 0;                          /* Disable input X-ON/X-OFF     
    */
    dcb.fErrorChar = 0 ;                    // do not replace witherror char 
        dcb.fNull = 0;                          /* Enable Null stripping        
   */
        dcb.fRtsControl  = RTS_CONTROL_DISABLE; // RTS off 
    dcb.fAbortOnError = 0 ; 
        dcb.XonLim  = 500 ;
        dcb.XoffLim = RxQueueSize * 80 / 100;
        dcb.Parity   = NOPARITY;  /* 0-4=None,Odd,Even,Mark,Space    */
        dcb.ByteSize = 8;         /* Number of bits/byte, 4-8        */
        dcb.StopBits = ONESTOPBIT; /* 0,1,2 = 1, 1.5, 2               */
        dcb.XonChar  = 0x11;        /* Tx and Rx X-ON character        */
        dcb.XoffChar = 0x13;        /* Tx and Rx X-OFF character       */


        #if 0
        DWORD fDsrSensitivity:1; /* DSR Sensitivity              */
        DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
        WORD wReserved;       /* Not currently used              */
        char ErrorChar;       /* Error replacement char          */
        char EofChar;         /* End of Input character          */
        char EvtChar;         /* Received Event character        */
        #endif

        if (!SetCommState(DevHandle, &dcb)) {
        printf("SetCommState failed %d\n", GetLastError());
            CloseHandle(DevHandle);
        DevHandle = INVALID_HANDLE_VALUE ;
            return 0;
        }

    ComTimeouts.ReadIntervalTimeout = 1000 ;
    ComTimeouts.ReadTotalTimeoutMultiplier = 500 ; 
    ComTimeouts.ReadTotalTimeoutConstant = 1000 ; 
    ComTimeouts.WriteTotalTimeoutMultiplier = 500 ; 
    ComTimeouts.WriteTotalTimeoutConstant = 1000; 
    SetCommTimeouts(DevHandle, &ComTimeouts) ; 

        PurgeComm(DevHandle,PURGE_RXABORT | PURGE_RXCLEAR | PURGE_TXABORT | 
PURGE_TXCLEAR);

#if 0 
    // Set timeouts to something which gives us not to slow response 
    // when waiting for events 
    ComTimeouts.ReadIntervalTimeout = 50 ;
    ComTimeouts.ReadTotalTimeoutMultiplier = 10 ; 
    ComTimeouts.ReadTotalTimeoutConstant = 100 ; 
    ComTimeouts.WriteTotalTimeoutMultiplier = 500 ; 
    ComTimeouts.WriteTotalTimeoutConstant = 1000; 
    SetCommTimeouts(DevHandle, &ComTimeouts) ; 
#endif 
    return 1 ;
}

//---------------------------------------------------------------------------

void CloseCom(void)
{
    if(DevHandle != INVALID_HANDLE_VALUE)
    {
            PurgeComm(DevHandle,PURGE_RXABORT | PURGE_RXCLEAR | PURGE_TXABORT | 
PURGE_TXCLEAR);
        CloseHandle(DevHandle);
        DevHandle = INVALID_HANDLE_VALUE ;
    }
}

//---------------------------------------------------------------------------

/*---------------------------------------------------------------------------
Wait for (partial) string with timeout (in milliseconds) 
----------------------------------------------------------------------------*/
int WaitFor(char * wstring, int timeout) 
{
    char c ; 
    int cmplen = strlen(wstring) ; 
    int nmatch = 0; 
    unsigned long  timeout_ticks ;
    int nread = 0;
    clock_t stop ;

    
    timeout_ticks = (CLOCKS_PER_SEC * (unsigned long) timeout) ;
    timeout_ticks += 500 ;                        // round up
    timeout_ticks /= 1000 ;                       // scale for CPS 
    stop = clock() + (clock_t)timeout_ticks ;
    while(stop > clock()) 
    {
        if(!ReadFile(DevHandle, &c, 1, &nread, 0)) 
        {
            printf("Read Failed %d\n", GetLastError() )  ;
            nread = 0 ; 
        }            

        if(nread) 
        {
            printf("%c",c) ; 

            if(c == wstring[nmatch])
            {
                nmatch++ ; 
                if(nmatch == cmplen) return 1 ; 
            }
            else 
            {
                nmatch = 0 ; 
            }
        }
    }

    return 0 ; 
}

//---------------------------------------------------------------------------

static void print_usage(char *pgm)
{
        printf("Usage:\n");
        printf("%s [file to load] [portnum]\n", pgm) ;
}

//---------------------------------------------------------------------------

//test only 
int main(int argc, char ** argv) 
{

        unsigned long baudrate = 115200 ; 
        DCB dcb;    
        char ch ;
        FILE * file ;
        unsigned char *buf, *loc ;
        int numread, numwritten ;
        int i ; 
        char txbuf[1024] ;
        long uboot_size ; 

        if(argc =! 3) {
                print_usage(argv[0]) ;
                exit(1) ;
        }

        if( !OpenCom(atoi(argv[2])) ){
                printf("failed to open com%s\n", argv[2]) ; 
                exit(1) ;
        }

        file = fopen(argv[1],"rb") ;
        if(!file) {
                printf("failed to open %s\n", argv[1] ) ;
                CloseCom() ;
                exit(1) ; 
        }

        buf = malloc(MAX_UBL_SIZE) ;
        if(!buf) {
                printf("failed to allocate buffer\n") ;
                fclose(file) ;
                CloseCom() ;
                exit(1) ;
        }
        numread = fread(buf, 1, MAX_UBL_SIZE, file) ;
        printf("read %d bytes from %s\n", numread, argv[1]) ;
        fclose(file) ; 
        if(!numread) {
                printf("nothing read, exiting\n") ;
                free(buf) ; 
                CloseCom() ;
                exit(1) ;
        }

        printf("Waiting for boot message from Davinci\n") ;
        while(1) {
                printf(".") ;
                if( WaitFor(" BOOTME\0", 5000) ) break ;
                if(kbhit()) {
                        ch = getch() ;
                        if(ch == 0x1b) {
                                printf("aborted\n") ;
                                CloseCom() ;
                                free(buf) ; 
                                exit(0) ;
                        }
                }
        }       
        
        printf("\nsending ACK\n") ;
        memset(txbuf, 0, 8) ; 
        sprintf(txbuf,"    ACK") ;
        WriteFile(DevHandle, txbuf, 8, &numwritten, 0) ;
        memset(txbuf, 0, 20) ; 
        sprintf(txbuf,"00000000%.4x%.4x0000", numread - (8*4), 0x100) ;
        WriteFile(DevHandle, txbuf, 20, &numwritten, 0) ;


        printf("Waiting for begin message from Davinci\n") ;
        if( ! WaitFor("  BEGIN\0", 5000) ) {
                printf("timed out\n") ;
                CloseCom() ;
                free(buf) ; 
                exit(1) ;
        }
        printf("sending empty CRC table\n") ;
        memset(txbuf, 0, 8) ;
        sprintf(txbuf,"00000000") ;
        for(i=0; i<256 ; i++) WriteFile(DevHandle, txbuf, 8, &numwritten, 0) ;

        printf("Waiting for done message from Davinci\n") ;
        if( ! WaitFor("   DONE\0", 5000) ) {
                printf("timed out\n") ;
                free(buf) ; 
                CloseCom() ;
                exit(1) ;
        }

        printf("Sending data\n") ;

        for(i=8*4 ; i<numread ; i+=4)
        {
                // XXXX assumes LE machine !! 
                unsigned long *p = (unsigned long *)&buf[i]; 
                sprintf(txbuf,"%.8x",*p) ;
                WriteFile(DevHandle, txbuf, 8, &numwritten, 0) ;
        }
        free(buf) ; 

        printf("Waiting for done message from Davinci\n") ;
        if( ! WaitFor("   DONE\0", 5000) ) {
                printf("timed out\n") ;
                CloseCom() ;
                exit(1) ;
        }

        printf("Waiting for UBL message from Davinci\n") ;
        if( ! WaitFor("Rboot->", 5000) ) {
                printf("timed out\n") ;
                CloseCom() ;
                exit(1) ;
        }

        // load uboot to ram at 0x81080000, default textbase
        // see u-boot config
        // XXXX : hardwired
        file = fopen("u-boot_ram.bin","rb") ;
        if(!file) {
                printf("u-boot not found\n") ; 
                CloseCom() ;
                exit(1) ;
        }
        fseek(file, 0, SEEK_END) ;
        uboot_size = ftell(file)  ;
        printf("uboot size is %d bytes\n", uboot_size) ;
        fseek(file, 0, SEEK_SET) ;
        txbuf[0] = 'l' ;
        txbuf[1] = 0 ;
        txbuf[2] = 0 ;
        txbuf[3] = 0x08 ;
        txbuf[4] = 0x81 ;
        txbuf[5] = uboot_size & 0xff ;
        txbuf[6] = (uboot_size >> 8) & 0xff ;
        txbuf[7] = (uboot_size >> 16) & 0xff ;
        txbuf[8] = (uboot_size >> 24) & 0xff ;
        WriteFile(DevHandle, txbuf, 9, &numwritten, 0) ;
        for(i=0 ; i<uboot_size ; i+=1024)
        {
                printf("*") ; 
                numread = fread(txbuf, 1, 1024, file) ;
                WriteFile(DevHandle, txbuf, numread, &numwritten, 0) ;
        }
        fclose(file) ; 
        printf("\n") ; 

        if( ! WaitFor("Rboot->", 5000) ) {
                printf("timed out\n") ;
                CloseCom() ;
                exit(1) ;
        }

        // start uboot at 0x81080000
        txbuf[0] = 'g' ;
        txbuf[1] = 0 ;
        txbuf[2] = 0 ;
        txbuf[3] = 0x08 ;
        txbuf[4] = 0x81 ;
        WriteFile(DevHandle, txbuf, 5, &numwritten, 0) ;

        WaitFor("autoboot:", 5000) ; 
        WriteFile(DevHandle, "\r", 1, &numwritten, 0) ;
        
        CloseCom();   
}


_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to