From 517492c9d0e4a7c48d52f8c8cae15f60d680bcb5 Mon Sep 17 00:00:00 2001 From: andreaskoepke Date: Tue, 6 May 2008 14:19:36 +0000 Subject: [PATCH] incorporate a patch from Frederik Hermans -- looks like the 2.4 kernel can not send all 260 bytes of a normal msp430 program chunk at once, so now you can choose a proper chunk size on the command line. --- tools/platforms/msp430/cppbsl/src/Bsl.cc | 2 +- tools/platforms/msp430/cppbsl/src/Bsl.h | 3 ++- tools/platforms/msp430/cppbsl/src/Parameters.cc | 15 ++++++++++++++- tools/platforms/msp430/cppbsl/src/Parameters.h | 1 + tools/platforms/msp430/cppbsl/src/cppbsl.cc | 4 ++-- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/tools/platforms/msp430/cppbsl/src/Bsl.cc b/tools/platforms/msp430/cppbsl/src/Bsl.cc index d895b20e..e35c4dec 100644 --- a/tools/platforms/msp430/cppbsl/src/Bsl.cc +++ b/tools/platforms/msp430/cppbsl/src/Bsl.cc @@ -152,7 +152,7 @@ int Bsl::writeData(int *err, const uint16_t addr, const uint8_t* data, const uin uint16_t adr; for(int i=0; i250) l=250; + if(l>CHUNKSIZE) l=CHUNKSIZE; adr=addr+i; r = writeBlock(err, adr, &data[i], l); if(r == -1) { diff --git a/tools/platforms/msp430/cppbsl/src/Bsl.h b/tools/platforms/msp430/cppbsl/src/Bsl.h index a7cc0b78..7561ca19 100644 --- a/tools/platforms/msp430/cppbsl/src/Bsl.h +++ b/tools/platforms/msp430/cppbsl/src/Bsl.h @@ -46,6 +46,7 @@ class Bsl { protected: BaseSerial *s; const char *image; + const int CHUNKSIZE; enum commands_t { MASS_ERASE = 0x18, @@ -81,7 +82,7 @@ protected: int highSpeed(int *err); public: - Bsl(BaseSerial* ser, const char *img) : s(ser), image(img) { + Bsl(BaseSerial* ser, const char *img, int cs=250) : s(ser), image(img), CHUNKSIZE(cs) { }; ~Bsl() { diff --git a/tools/platforms/msp430/cppbsl/src/Parameters.cc b/tools/platforms/msp430/cppbsl/src/Parameters.cc index 578035c3..56d7cb1e 100644 --- a/tools/platforms/msp430/cppbsl/src/Parameters.cc +++ b/tools/platforms/msp430/cppbsl/src/Parameters.cc @@ -44,7 +44,8 @@ Parameters::Parameters(int argc, char **argv) { action = NONE; image = 0; telosb = false; - + chunksize = 250; + poptOption optionsTable[] = { {"debug",'D', 0, 0, 'd', "print many statements on progress"}, {"f1x",'1', 0, 0, '1', "Specify CPU family, in case autodetect fails"}, @@ -55,6 +56,8 @@ Parameters::Parameters(int argc, char **argv) { {"intelhex",'I', 0, 0, 'I', "force fileformat to be IntelHex"}, {"erase",'e', 0, 0, 'e', "erase device"}, {"reset",'r', 0, 0, 'r', "reset device"}, + {"send-chunk-size",'s', POPT_ARG_INT | POPT_ARGFLAG_SHOW_DEFAULT, + &chunksize, 0, "program msp430 using chunks of this size", ""}, {"program",'p', POPT_ARG_STRING, &image, 0, "Program file", ""}, {"comport",'c', POPT_ARG_STRING, &device, 0, @@ -120,6 +123,16 @@ Parameters::Parameters(int argc, char **argv) { else if(action == FLASH) { exit(1); } + // force sane chunk size + if(chunksize < 150) { + chunksize = 150; + } + else if(chunksize > 250) { + chunksize = 250; + } + // must be even! + chunksize /= 2; + chunksize *= 2; poptFreeContext(optCon); }; diff --git a/tools/platforms/msp430/cppbsl/src/Parameters.h b/tools/platforms/msp430/cppbsl/src/Parameters.h index c91525bf..c5f770fb 100644 --- a/tools/platforms/msp430/cppbsl/src/Parameters.h +++ b/tools/platforms/msp430/cppbsl/src/Parameters.h @@ -61,6 +61,7 @@ public: bool telosb; actions_t action; + int chunksize; public: Parameters(int argc, char **argv); diff --git a/tools/platforms/msp430/cppbsl/src/cppbsl.cc b/tools/platforms/msp430/cppbsl/src/cppbsl.cc index 21d2213f..35347828 100644 --- a/tools/platforms/msp430/cppbsl/src/cppbsl.cc +++ b/tools/platforms/msp430/cppbsl/src/cppbsl.cc @@ -71,7 +71,7 @@ int main(int argc, char *argv[]) { else { bs = new BaseSerial(oldterm, readFD, writeFD, parameters->invertTest, parameters->invertReset); } - bsl = new Bsl(bs, parameters->img.c_str()); + bsl = new Bsl(bs, parameters->img.c_str(), parameters->chunksize); switch(parameters->action) { case Parameters::ERASE: r = bsl->erase(&err); @@ -104,5 +104,5 @@ int main(int argc, char *argv[]) { bs->disconnect(&err); delete bs; delete parameters; - return 0; + return (r != 0); } -- 2.39.2