summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcpldcpu <cpldcpu@gmail.com>2014-05-01 19:15:05 +0200
committercpldcpu <cpldcpu@gmail.com>2014-05-01 19:15:05 +0200
commit7e103740357273dcf1143bd04a1cb7fa957be89a (patch)
treed17dc4cc9b3da13520a50c1d9b4caf0bc994c984
parent0b653a2d0d74c1ad0ed6e2d0b54cdf6e46ab67a4 (diff)
downloadmicronucleus-7e103740357273dcf1143bd04a1cb7fa957be89a.tar.gz
micronucleus-7e103740357273dcf1143bd04a1cb7fa957be89a.tar.bz2
micronucleus-7e103740357273dcf1143bd04a1cb7fa957be89a.zip
commandline: Added signature to configurationreply
-rw-r--r--commandline/builds/Windows/micronucleus.exebin27150 -> 27662 bytes
-rw-r--r--commandline/library/micronucleus_lib.c74
-rw-r--r--commandline/library/micronucleus_lib.h2
-rw-r--r--commandline/micronucleus.c1
4 files changed, 52 insertions, 25 deletions
diff --git a/commandline/builds/Windows/micronucleus.exe b/commandline/builds/Windows/micronucleus.exe
index 45c8b2d..6a373d7 100644
--- a/commandline/builds/Windows/micronucleus.exe
+++ b/commandline/builds/Windows/micronucleus.exe
Binary files differ
diff --git a/commandline/library/micronucleus_lib.c b/commandline/library/micronucleus_lib.c
index d6b4243..f7b51d5 100644
--- a/commandline/library/micronucleus_lib.c
+++ b/commandline/library/micronucleus_lib.c
@@ -62,32 +62,56 @@ micronucleus* micronucleus_connect(int fast_mode) {
nucleus->device = usb_open(dev);
- // get nucleus info
- unsigned char buffer[4];
- int res = usb_control_msg(nucleus->device, USB_ENDPOINT_IN| USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, 0, 0, (char *)buffer, 4, MICRONUCLEUS_USB_TIMEOUT);
- assert(res >= 4);
-
- nucleus->flash_size = (buffer[0]<<8) + buffer[1];
- nucleus->page_size = buffer[2];
- nucleus->pages = (nucleus->flash_size / nucleus->page_size);
- if (nucleus->pages * nucleus->page_size < nucleus->flash_size) nucleus->pages += 1;
-
- nucleus->bootloader_start = nucleus->pages*nucleus->page_size;
-
- if ((nucleus->version.major>=2)&&(!fast_mode)) {
- // firmware v2 reports more aggressive write times. Add 2ms if fast mode is not used.
- nucleus->write_sleep = (buffer[3] & 127) + 2;
- } else {
+ if (nucleus->version.major>=2) { // Version 2.x
+ // get nucleus info
+ unsigned char buffer[6];
+ int res = usb_control_msg(nucleus->device, USB_ENDPOINT_IN| USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, 0, 0, (char *)buffer, 6, MICRONUCLEUS_USB_TIMEOUT);
+ assert(res >= 4);
+
+ nucleus->flash_size = (buffer[0]<<8) + buffer[1];
+ nucleus->page_size = buffer[2];
+ nucleus->pages = (nucleus->flash_size / nucleus->page_size);
+ if (nucleus->pages * nucleus->page_size < nucleus->flash_size) nucleus->pages += 1;
+
+ nucleus->bootloader_start = nucleus->pages*nucleus->page_size;
+
+ if ((nucleus->version.major>=2)&&(!fast_mode)) {
+ // firmware v2 reports more aggressive write times. Add 2ms if fast mode is not used.
+ nucleus->write_sleep = (buffer[3] & 127) + 2;
+ } else {
+ nucleus->write_sleep = (buffer[3] & 127);
+ }
+
+ // if bit 7 of write sleep time is set, divide the erase time by four to
+ // accomodate to the 4*page erase of the ATtiny841/441
+ if (buffer[3]&128) {
+ nucleus->erase_sleep = nucleus->write_sleep * nucleus->pages / 4;
+ } else {
+ nucleus->erase_sleep = nucleus->write_sleep * nucleus->pages;
+ }
+
+ nucleus->signature1 = buffer[4];
+ nucleus->signature2 = buffer[5];
+
+ } else { // Version 1.x
+ // get nucleus info
+ unsigned char buffer[4];
+ int res = usb_control_msg(nucleus->device, USB_ENDPOINT_IN| USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, 0, 0, (char *)buffer, 4, MICRONUCLEUS_USB_TIMEOUT);
+ assert(res >= 4);
+
+ nucleus->flash_size = (buffer[0]<<8) + buffer[1];
+ nucleus->page_size = buffer[2];
+ nucleus->pages = (nucleus->flash_size / nucleus->page_size);
+ if (nucleus->pages * nucleus->page_size < nucleus->flash_size) nucleus->pages += 1;
+
+ nucleus->bootloader_start = nucleus->pages*nucleus->page_size;
+
nucleus->write_sleep = (buffer[3] & 127);
- }
-
- // if bit 7 of write sleep time is set, divide the erase time by four to
- // accomodate to the 4*page erase of the ATtiny841/441
- if (buffer[3]&128) {
- nucleus->erase_sleep = nucleus->write_sleep * nucleus->pages / 4;
- } else {
- nucleus->erase_sleep = nucleus->write_sleep * nucleus->pages;
- }
+ nucleus->erase_sleep = nucleus->write_sleep * nucleus->pages;
+
+ nucleus->signature1 = 0;
+ nucleus->signature2 = 0;
+ }
}
}
}
diff --git a/commandline/library/micronucleus_lib.h b/commandline/library/micronucleus_lib.h
index 5bab8b4..2db7b62 100644
--- a/commandline/library/micronucleus_lib.h
+++ b/commandline/library/micronucleus_lib.h
@@ -73,6 +73,8 @@ typedef struct _micronucleus {
unsigned int pages; // total number of pages to program
unsigned int write_sleep; // milliseconds
unsigned int erase_sleep; // milliseconds
+ unsigned char signature1; // only used in protocol v2
+ unsigned char signature2; // only used in protocol v2
} micronucleus;
typedef void (*micronucleus_callback)(float progress);
diff --git a/commandline/micronucleus.c b/commandline/micronucleus.c
index 1b76e72..0e76997 100644
--- a/commandline/micronucleus.c
+++ b/commandline/micronucleus.c
@@ -201,6 +201,7 @@ int main(int argc, char **argv) {
// }
printf("> Device has firmware version %d.%d\n",my_device->version.major,my_device->version.minor);
+ if (my_device->signature1) printf("> Device signature: 0x1e%02x%02x \n",(int)my_device->signature1,(int)my_device->signature2);
printf("> Available space for user applications: %d bytes\n", my_device->flash_size);
printf("> Suggested sleep time between sending pages: %ums\n", my_device->write_sleep);
printf("> Whole page count: %d page size: %d\n", my_device->pages,my_device->page_size);