[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avrdude-dev] [bug #51117] Problems with extended address (>128K) and bu
From: |
Stephan Schreiber |
Subject: |
[avrdude-dev] [bug #51117] Problems with extended address (>128K) and buffer size |
Date: |
Thu, 25 May 2017 19:16:44 -0400 (EDT) |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4 |
URL:
<http://savannah.nongnu.org/bugs/?51117>
Summary: Problems with extended address (>128K) and buffer
size
Project: AVR Downloader/UploaDEr
Submitted by: tozzi
Submitted on: Thu 25 May 2017 11:16:43 PM UTC
Category: None
Severity: 3 - Normal
Priority: 5 - Normal
Item Group: None
Status: None
Privacy: Public
Assigned to: None
Originator Name: Stephan Schreiber
Originator Email:
Open/Closed: Open
Release: 6.3
Discussion Lock: Any
Programmer hardware: AVROSP (Butterfly)
Device type: ATXMega256A3(U)
_______________________________________________________
Details:
Using a black-box (client-provided) which is connected via Ft232R USB adapter,
most likely ancient boot loader, following AVROSP protocol (and working
correctly with avrosp.exe).
My job here is to port a Windows Firmware Updater (using avrosp.exe) to Mac OS
X.
ATXMega256A3 (might be -U, can't find out without disassembling the unit which
I am clearly not supposed to do).
Due to NDA I cannot disclose any further details, but I can provide a partial
serial log if you're interested.
I've analyzed serial communications and that's how I finally found out what is
going wrong there.
For some reason, buffer size is reported as 0x0080 (128 bytes) and the update
process fails, as 512 bytes (page size correctly given in avrdude.conf). are
expected.
The even more serious problem, however, is that extended addressing is not
being used by avrdude in this case.
"A" 0xff00" becomes "A" 0x0000 instead of "H" 0x010000", thus overwriting
flash memory from the beginning instead of appending the code properly.
I have applied this (rough) patch, which makes it work; just wanted to let you
know.
I probably can't use avrdude anyway, because of the restrictions GPL would
impose.
Anyway, here's the patch:
--- butterfly.c.orig 2014-07-16 22:14:58.000000000 +0200
+++ butterfly.c 2017-05-23 22:49:20.000000000 +0200
@@ -321,6 +321,10 @@
PDATA(pgm)->buffersize = (unsigned int)(unsigned char)c<<8;
butterfly_recv(pgm, &c, 1);
PDATA(pgm)->buffersize += (unsigned int)(unsigned char)c;
+
+ // overriding it for now
+ PDATA(pgm)->buffersize = 512;
+
avrdude_message(MSG_INFO, "Programmer supports buffered memory access with
buffersize=%i bytes.\n",
PDATA(pgm)->buffersize);
@@ -424,6 +428,7 @@
static void butterfly_set_addr(PROGRAMMER * pgm, unsigned long addr)
{
+if( addr < 0x10000 ) {
char cmd[3];
cmd[0] = 'A';
@@ -432,6 +437,19 @@
butterfly_send(pgm, cmd, sizeof(cmd));
butterfly_vfy_cmd_sent(pgm, "set addr");
+
+ } else {
+
+ char cmd[4];
+
+ cmd[0] = 'H';
+ cmd[1] = (addr >> 16) & 0xff;
+ cmd[2] = (addr >> 8) & 0xff;
+ cmd[3] = addr & 0xff;
+
+ butterfly_send(pgm, cmd, sizeof(cmd));
+ butterfly_vfy_cmd_sent(pgm, "set extaddr");
+ }
}
Best regards,
Stephan
_______________________________________________________
Reply to this item at:
<http://savannah.nongnu.org/bugs/?51117>
_______________________________________________
Message sent via/by Savannah
http://savannah.nongnu.org/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [avrdude-dev] [bug #51117] Problems with extended address (>128K) and buffer size,
Stephan Schreiber <=