gbadev.org forum archive

This is a read-only mirror of the content originally found on forum.gbadev.org (now offline), salvaged from Wayback machine copies. A new forum can be found here.

Hardware > Understanding the multiboot protocol

#77022 - Christopher - Mon Mar 27, 2006 3:36 pm

Hi,

As part of attempting to get into GBA development I have been attempting to produce my own multiboot cable to allow me to download small applications from my PC via the EXT port.

I have a PCB that I have developed which has among other things a microcontroller and USB interface. I have been attempting to follow examples such as that provided at http://www.ajo.es/gba/hardware.html to develop firmware for this device to allow me to communicate with my GBA via the multiboot functionality of the GBA.

I have struck some problems and am hopeing someone will be able to shed some light onto the situation/help me out.

I have captured a waveform diagram of my circuit attempting to transmit 0x6202 to the GBA by using a logic analyser. (the signal labled SO in the diagram is connected to SI on the slave GBA)

[Images not permitted - Click here to view it]

From what I understand of the protocol, this fits closely to the waveforms I have seen in documents such as http://www.circuitcellar.com/PSOC2002/winners/273.pdf.

However try as I might I havn't been able to get my GBA to reply to my initial transfer. I've tried tweaking the various delays seen in the waveforms (such as the delay between pulling SC low and starting the transmission on SD) and extending the length of time I hold SC and SO low etc to no avail. I just can't seem to get my GBA to respond once I stop driving the SD signal and attempt to read the data driven onto the signal by the GBA.

From my understanding the multiboot protocol (multiplayer SIO mode) is basically a 16n1 serial port running at 115200 baud with RX and TX multiplexed onto a single signal (SD).

To further debug my circuitry I have modified my source code to only transmit/received 8 data bits and use seperate TX/RX pins. When I make this modification (and use a RS2323 level transceiver) I can use my bitbashed serial port to communicate with a PC reliably, this test and the above waveform provides me with some confidence that my bitbashed serial port code should be ok when transmitting 16data bits to a GBA.

One thing I can not fully explain at present is the following waveform capture. If I disconnect my microcontroller circuitry from the cable connected to the GBA and enter the GBA into multiboot mode by holding START and SELECT during a power up I get the following waveforms.

[Images not permitted - Click here to view it]

Thus is not what I was expecting based upon the documentation I've been reading so far. I was expecting SC to always be logic high.

Does anyone have any light they may be able to shed on this problem for me? Or words of wisdom for implementing this protocol?

Thanks,
Christopher Fairbairn

PS: One thing that confuses me slightly is some web pages which document the multiboot protoocl as using the SIO Normal mode (32bit transfers). Is it possible to use the multiboot functionality with a varity of wire protocols? If so how does the GBA decide which one to make use of?

#77042 - tepples - Mon Mar 27, 2006 6:57 pm

Have you tried the other endianness?

Have you tried communicating with a GBA that is already running your own software (e.g. through buying a GBA Movie Player and a CF card)?
_________________
-- Where is he?
-- Who?
-- You know, the human.
-- I think he moved to Tilwick.

#77129 - Christopher - Tue Mar 28, 2006 2:58 pm

tepples wrote:
Have you tried the other endianness?

Have you tried communicating with a GBA that is already running your own software (e.g. through buying a GBA Movie Player and a CF card)?


I have tried other endianness and bit orders to no avail. I am quite proficient at PIC assembly code (and can grok most other architectures such as 8051 etc) so from analysing the firmware for a few homebrew GBA multiboot cables I've found on the internet I bieleve I have the correct endianess of my transfers etc.

I have yet to try experimenting with a GBA program written to explictly try out the multi player mode of SIO transfers. This is mainly due to not having suitable hardware at present, although hopefully in a few days I will have managed to purchase a GBA Movie Player from a local supplier in order to execute code... This should make it much easier to have control over the GBA side of things as well to eliminate as many factors as possible from my debugging.

I will investigate further, I am sure I've just missed something simple somewhere...