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.

Boot using USB interface for flash programming

Expert 2280 points

Hi

I'm planning to develop an "USB pseudo-bootloader" application for AM335x. The idea is based on the capability of AM335x internal BootLoader (ROM BL) to boot using USB0 as a CDC/ECM USB interface, downloading a file into internal RAM and running it.

Once loaded in internal RAM, my application should be able to init peripherals (external RAM and SPI Flash), download to RAM software to be written to flash (SPL, U-Boot, Kernel, etc...) using the same CDC/ECM USB0 interface, and finally write it to flash. This would help in the first programming of empty flash on our product based on AM335x.

Do you suggest to start with StarterWare SDK and those examples? Or to follow a different approach? Any other solution to simplify the process of "first programming"?

StarterWare demo application seems to require a booloader, while I have hard constraints on application size due to internal RAM limit (110 KB as stated in TRM section 26.1.8.2).

Any help or suggestion would be really appreciated.

Best regards,
Max

  • Max:

    I am working on upgrading our existing Flash Tool for AM35x and AM37x to work with AM335x.

    ROM boot loader has changed to use XMODEM-1K for UART and RNDIS / TFTP for USB.

    I am looking for ways to implement the new boot procedure.   

    Would be good if I had a (freeware) command-line program that would start a TFTP server (on Windows host)

    and configure it to boot the AM335x with the 2nd Loader binary provided by my flash tool.

    Then each time the AM335x board is reset, the TFTP server would serveup the 2nd loader binary.

    This tool will be released in stages: first UART flashing, then USB flashing, then ability

    to run on Linux host.

    Regards,

    Michael T

     

  • Hi,

    how to load the u-boot.img using USB0, currently i using beaglebone rev A3 (AM335x processor), can i load the u-boot from linux host pc through USB0 instead of using MMC0? What configuration need to be done on hardware side and linux PC side?

    Thanks.

  • Hi Michael, very good news!

    Do you have already a raw plan of feature releases?

    Unfortunately I develop on Linux platforms, so cannot help with BOOTP and TFTP tools on Windows.

    Which will be the architecture of the software of the 2nd Loader binary? I do not know nothing about existing Flash Tool for AM35x and AM37x, where I can find some details? I suppose that this software will download further binaries (U-Boot, etc) through a communication channel over UART or USB, and then will write them on flash. In case of USB, do you plan to use a network channel based on RNDIS like one used by ROM boot loader? Or a different one?

    Thanks for you answers.

    Best regards,

    Max

  • Chia, your is a different case.

    We are talking about loading the 2nd Loader through USB0 using RNDIS, this is a capability of AM335x ROM Bootloader (aka RBL) depending of SYSBOOT pins configuration (see TRM chapter 26). Beaglebone has a fixed configuration, and, if I am not wrong, it will try UART and USB if MMC is missing and cannot find anything good on flash (but I am not 100% sure).

    Instead, you would like 2nd Loader (SPL aka MPO) to load 3rd Loader (U-Boot) using USB0 interface. Currently it seems MLO supports just NAND/MMC/UART media to load U-Boot from (see http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User%27s_Guide).

    Regards

    Max

  • Hi,

    how the 1st loader is load ?

    regarding the 1st loader, is it loading from AM355x ROM is the only method ?

    if i design a custom board using AM335x, how i burn the 1st loader into the AM355x ROM ?

    Thanks and regard,

    chia 

  • The AM335x ROM is masked and can not be changed.

    The ROM code will begin the system boot process by reading the SYSBOOT inputs latched during reset to determine which peripheral to use for booting.

    Regards,
    Paul

  • Hi,

    is it mean that the 1st stage loader already inside the AM335x ROM by default ? in case of i buy a new AM335x processor.

    Thanks and Regards,

    chia

     

  • Yes.  The ROM memory cells are implemented with descrete logic when the device is built.  They are not programmable memory cells.

    Regards,
    Paul

  • Dear Chia and Paul, could you please move to another thread to talk about things not concerning the topic of this one? Just to keep forum threads focused on specific topics: I think this could help other users looking and searching in existing threads.

    Moreover, Chia, I've address you to Technical Reference Manual, chapter 26 "Initialization", where you would have found all the info you have asked.

    Thanks. Best regards,

    Max

  • Hi Michael,

    I've tried to run some USB0 boot tests, but I'm facing strange issues and behaviours. Please have a look at this thread, USB Boot Mode section: http://e2e.ti.com/support/dsp/sitara_arm174_microprocessors/f/791/t/168595.aspx.

    I wonder if it can depend on my Linux host PC, so I would like to do the same test with a Windows one: I'm trying with a Windows 7, but it's a mess! Windows does not identify the USB device as an RNDIS, and when I try to install the driver the device disappears, of course due to boot devices sequence. I've installed tftpd32 which has both TFTP and DHCP servers, but it's useless till network interface is not working.

    Any suggestions on both the issues?

    Thanks in advance. Best regards,

    Max