How can I program ST MCUs from USB disk without PC? - embedded

I want to program (such as STM32F407 cortex M4 MCU) without PC, by using only MCU board, USB disk and USB cable. Binary(.HEX) file should be stored in USB disk. then bootloader which preloaded in MCU, should load binary file from usb to the program memory.
Is it possible to do it, as I describe above?

Yes it is entirely possible given a suitable boot loader. I have implemented a boot loader on STM32 that accepts updates over serial, SD card or USB VCP; adding USB mass storage support would be a relatively simple extension.
Your boot loader will require USB mass storage device support, for which the USB controller must support operation as a USB host, and you will require a file system (could be read-only to reduce size). You will also need to support flash programming.

Related

Since a mcu can boot from an external spi flash, why spi driver is needed to write or read the flash in appliction

As i know, mcu such as stm32f4 can be configured to boot from external spi flash, or sd card. But when we write or read the flash or sd card in application, initialization or configuration driver code must be executed at first.
I think since the mcu has been booted from spi flash, some driver code should already have been executed.
I was wondering about the following:
How can the mcu read spi flash or sd card after reset?
What is the difference between read spi flash at power on and read it in application?
Why we need those drivers in applicaton when we already have read access to those devices?

Is it possible program STM32 device wireless?

I have an STM32-discovery board and I am trying to program it with not using any cables.In the place where I am doing my internship, they first wanted me to program STM32-discovery with UART. I was able to do this by making the necessary connections and using the Flash loader demo. Now my next task is to add an ESP-07 wifi module on the STM32-discovery board, connect this module to the same network as my computer, and wirelessly program it from my computer. No other device is wanted in between (like Raspberry). I did some research on this topic but couldn't come to a conclusion. What I found; I can remote program by connecting the card to a Raspberry or a device called Codegrip. Is it possible to do this with only an ESP-07 without these devices? I will be glad if you just tell me what should I look for.
Yes, it's possible to reprogram the STM32 flash wirelessly if the STM32 is running a program that supports this capability. When you programmed the STM32 via the UART there was a program running on the STM32 that:
opened the UART port,
received the new program data via the UART (using some protocol),
and then programmed that new data onto the flash.
To do likewise wirelessly, the STM32 will need to be running a program that:
opens the Wi-Fi port,
receives the new program data via Wi-Fi (using some protocol),
and then programs that new data onto the flash.
You may have used the STM32 internal ROM bootloader to reprogram via the UART. And if so then you used the protocol required by that ROM bootloader. But the ROM bootloader probably does not support Wi-Fi. So you'll probably be creating your own bootloader program that can communicate over Wi-Fi. And you might be defining your own protocol for transferring the program data over Wi-Fi. Or maybe you can apply some established protocol such as FTP. Search for examples of bootloaders that support OTA (over the air) firmware updates.
There are two possible solutions.
Write a custom bootloader for the STM32 - the flash is organised with smaller blocks at the start to support that, so you would move your application to higher memory and have the bootloader either jump to the application to load a new application. The bootloader can then access the Wi-Fi module (and other interfaces) to get updates.
Write custom firmware for the ESP0-07 so that it receives and stores the STM32 image, then transfers it to the STM32 using the existing ROM serial bootloader. In this case you need the details of the bootloader protocol, and it would be useful if the ESP-07 had a GPIO connection to the STM32 reset line so that it can invoke the bootloader without a manual reset.
Either way, you need to write software for one or other of the devices.
You can use any standard bootloader and connect the Wireless module like ESP32 (Bluetooth and Wifi), ESP8266 (Bluetooth and Wifi), BT-05 (Bluetooth), HM-10 (Bluetooth), etc.
Then create the android application or web application and update the Firmware or application.
If you don't want to use the Standard Bootloader, you can implement your own bootloader and add this OTA feature to that.
We have added the Tutorials step by step. Please refer to this if you get time. There we have developed the custom bootloader and updated the Firmware.

Accessing external storage on Nucleo

There is 1.6 MB of external storage shows when we connect Nucleo to PC. Can we access that storage to save or read files from it from application i.e. in code? I haven't found any particular solution anywhere so asking here.
Except the "major" MCU for application, there is another MCU on the Nucleo board works as a programmer (ST-Link). This auxiliary MCU is connected to the application MCU with an UART for virtual com port, and a SWD for programming. That 1.6 MB of external storage you see on PC is emulated by this programmer MCU, and the firmware in this MCU has no simple way to be modified (suppose you still need it to act as a functional programmer and VCP). So the answer to your question is no simple way to do that, unless you are willing to sacrifice the programmer functionality of the auxiliary MCU and write a protocol to access the emulated storage on that MCU.
The mass storage device presented is not real, it is presented by the Nucleo bootloader/debugger interface chip as a simple drag-and-drop means of programming without additional software on the host PC. It is a means of programming the on-chip flash of the STM32 and is not external storage.

Make USB appear as a CD

Right. So I've been looking at VBS Scripts and batch files recently and autorun.inf would really be the cherry on the cake (don't worry I don't plan on using it as a tool for evil). I know that it has been turned off by default on Windows 7 onward but I read somewhere that it is still on for CDs. So naturally, I wonder - Is it possible to make the USB drive look as if it were a CD to make autorun work?
a USB pen drive and a USB CD tray have the same device class (USB mass storage device class). the problem is that despite the same device class there are other parts in USB protocol that differ (interface descriptors, configuration descriptors, endpoint descriptors,...) These usb descriptors that are also responsible for what driver / kernel module is loaded by the os, are hardcoded in the firmware of the device. your only chance to make a pen drive appear as a CD is to change these hardcoded descriptors or what is easier, to build your own device using a microcontroller with USB functionality in that you program your custom descriptors. Note that kernel modules and drivers are based on standardized protocol so your descriptors have fit these standards for the device to work.
In http://www.beyondlogic.org/usbnutshell/usb1.shtml is more information about USB protocol and the descriptors...

how to Remote firmware update of stm32 microcontroller with a code backup

we are planning to use stm32f4 discovery board in our satellite.we will have a code backup in the sd card.How to dump the code on to the Microcontroller when there is a code corruption.
You need to write a bootloader that has access to the SD card peripheral which will read the backup code off of the card and program the flash program space on the STM32 itself (assuming this is where you are running the code from).
There are plenty of resources on bootloading the STM32. Here are just a few
STM32 microcontroller system memory boot mode
Make own bootloader for Arm Cortex-M3
You need boot loader to do your work. You may choose to use the example boot loader that STM provided or your can write your own boot loader.
The flash you reserve for the bootloader must be a whole number of flash pages starting from the reset address , After that you will have to rebuild your application code for the new start address because current start address has bene taken by Bootloader.