Skip to main content
Topic: BPv4 AVRDUDE required patch (Read 2897 times) previous topic - next topic

BPv4 AVRDUDE required patch

The BP6.3 -> AVRDUDE code needs to be patched for the BPv4. Cut and paste this over the same section in spi.c and see how it goes. If it works then push it to the SVN else disregard.

#ifdef AVR_EXTENDED_COMMANDS
                    case 6: // AVR Extended Commands
                        UART1TX(1); // send 1/OK (ie, AVR Extended Commands accepted)


                        inByte = UART1RX(); //grab it

                        switch (inByte) {
                            case 0x00: // null operation, return OK
                                UART1TX(1); // send 1/OK
                                break;
                            case 0x01: // version check
                                UART1TX(1); // send 1/OK
                                UART1TX(0x00);
                                UART1TX(0x01); // version 1
                                break;
                            case 0x02: // bulk memory read from flash
                                // read in the start address (4 bytes, MSB first)
                                saddr = 0;
                                for (j = 0; j < 4; j++) {

                                    inByte = UART1RX(); //grab it
                                    saddr = (saddr << 8) | inByte;
                                }

                                // read in the bytes to read (4 bytes, MSB first) [inclusive]
                                length = 0;
                                for (j = 0; j < 4; j++) {

                                    inByte = UART1RX(); //grab it
                                    length = (length << 8) | inByte;
                                }

                                // FIXME - Can't handle pages past the first 64kb
                                if (saddr > 0xFFFF || length > 0xFFFF || (saddr + length) > 0xFFFF) {
                                    UART1TX(0);
                                } else {
                                    // just assume it'll work...
                                    UART1TX(0x01); // send 1/OK

                                    for (j = saddr; length > 0; j++) {
                                        // fetch low byte from this memory word
                                        spiWriteByte(0x20);
                                        spiWriteByte(j >> 8);
                                        spiWriteByte(j & 0xFF);
                                        UART1TX(spiWriteByte(0x00)); // fetch byte that was read
                                        length--;

                                        if (length == 0) break;

                                        // fetch high byte from this memory word
                                        spiWriteByte(0x28);
                                        spiWriteByte(j >> 8);
                                        spiWriteByte(j & 0xFF);
                                        UART1TX(spiWriteByte(0x00)); // fetch byte that was read
                                        length--;
                                    }
                                }
                                break;
                            default:
                                UART1TX(0);
                                break;
                        }
#endif