First and foremost I want to say that I am doing this as a hobby, so fun and learning by doing is the main goal of this project. I don't care if it seems possible or not, at least I want to try it.
But what is the project? I basically want to step out of the microcontroller world and work with a "real" processor, external RAM, external Flash etc. I know there are several microcontrollers from Atmel / STM which have broken out address - and databus...but I want to go a different way!
A different way means to work with a cheap 16-year old GSM baseband processor from Mediatek: the MT6205B. It features a 26MHz 32-bit ARM7TDMI CPU.
What I have at the moment is 176 pages of datasheet and a reference schematic for a "simple" GSM phone. But I don't really care about GSM or network stuff, my first goal is to get the processor working together with RAM/Flash and display (16-bit 8080 interface).
Unfortunately the two documents I have are marked as "confidential" so I am not sure if I am allowed to share them here - but I do it anyways:
https://www.yumpu.com/en/document/view/39819735/mt6205b-gsm-baseband-processor-data-sheet-data-sheet-gadget (if this is not allowed here I can remove this link of course)
The most important part for me at the moment is to understand the boot-up sequence of the processor and how to get my C-program from my PC over a interface (don't know which interface is used at the end) to the CPU and into the external Flash.
What I know at the moment is that the MT6205B has internal SRAM and internal Boot ROM which are used for "factory programming" and the Boot ROM is not writeable (I assume). The Boot-Mode is configured by a GPIO called "BOOT" depending on whether it is tied to GND or VCC. There are these two boot modes:
- Running code from Boot Code for factory programming
(I don't really know what "Boot Code" means here?)
- Running code from external flash for normal operation
The Boot Code is placed with Memory Re-Mapping Mechanism in External Memory Controller and includes just two words of instruction: There is a jump instruction that leads the processor to run the code started at address 0x48000000 where the System ROM is placed
I don't understand where this "Boot Code" is comming from? It sounds to me that Boot Code is not equal to System ROM - but where is it stored?
Usually the Factory Programming Host connects with MT6205B by UART1 interface. To have it work properly the system should boot up from Boot Code, that is the pin BOOT tied to GND. The download speed can be up to 230K bps.
After system being reset, the Boot Code will guide the processor to run the Factory Programming software placed in System ROM. Then, the MT6205B will start and continue to poll the UART1 port until valid information is detected. The first information received on the UART1 will be used to configure the chip for factory programming. The flash downloader program is then transferred into System RAM or external SRAM
Again, I don't quite understand what is Boot Code and what is System ROM. Boot Code are these two instructions described above (LDR + jump to 0x48.....) and System ROM contains UART1 initialization? And the stuff which is received by UART1 is then transferred to System RAM - so it makes sense that the program which is transferred over UART1 contains initialization code for external Flash and then can be used as a "bootloader" to actually program the flash?
Unfortunately that's basically all information for the boot up sequence and no further hints about what is "valid information". No further information about the baud rate (maybe 230.000?).
The MT6205B has JTAG-pins - I don't know if they can be used to program the flash via a JLink for example? I've never done anything with JTAG so I don't know if it is enough for the JTAG interface to know that there is a "ARM7TDMI"-based processor connected or if I actually need some kind of config file for the specific processor?
What I hope for at the moment is to find some people here who have experience with boot up sequences of processors and / or JTAG flash programming and maybe can give me some hints here or there.