From 948799c8d91166cb889ee3493069742ef9503bd4 Mon Sep 17 00:00:00 2001 From: Gadgeteer Date: Sun, 29 Sep 2019 13:09:11 +0100 Subject: [PATCH 1/3] Reduce Write Buffer to 2048 To make BOSSA compatible with devices with 8K Ram the upload has to be smaller than 4K because it starts to overflow into the stack. --- Samba.h | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Samba.h diff --git a/Samba.h b/Samba.h new file mode 100644 index 00000000..29f8f791 --- /dev/null +++ b/Samba.h @@ -0,0 +1,115 @@ +/////////////////////////////////////////////////////////////////////////////// +// BOSSA +// +// Copyright (c) 2011-2018, ShumaTech +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of the nor the +// names of its contributors may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _SAMBA_H +#define _SAMBA_H + +#include +#include +#include +#include + +#include "SerialPort.h" + +class SambaError : public std::exception +{ +public: + SambaError() : exception() {}; + const char* what() const throw() { return "SAM-BA operation failed"; } +}; + + + +class Samba +{ +public: + Samba(); + virtual ~Samba(); + + bool connect(SerialPort::Ptr port, int bps = 115200); + void disconnect(); + + void writeByte(uint32_t addr, uint8_t value); + uint8_t readByte(uint32_t addr); + + void writeWord(uint32_t addr, uint32_t value); + uint32_t readWord(uint32_t addr); + + void write(uint32_t addr, const uint8_t* buffer, int size); + void read(uint32_t addr, uint8_t* buffer, int size); + + void go(uint32_t addr); + + std::string version(); + + void chipId(uint32_t& chipId, uint32_t& extChipId); + + void setDebug(bool debug) { _debug = debug; } + + const SerialPort& getSerialPort() { return *_port; } + + void reset(); + + // Extended SAM-BA functions + bool canChipErase() { return _canChipErase; } + void chipErase(uint32_t start_addr); + + bool canWriteBuffer() { return _canWriteBuffer; } + void writeBuffer(uint32_t src_addr, uint32_t dst_addr, uint32_t size); + uint32_t writeBufferSize() { return 2048; } + + bool canChecksumBuffer() { return _canChecksumBuffer; } + uint16_t checksumBuffer(uint32_t start_addr, uint32_t size); + uint32_t checksumBufferSize() { return 2048; } + uint16_t checksumCalc(uint8_t c, uint16_t crc); + +private: + bool _canChipErase; + bool _canWriteBuffer; + bool _canChecksumBuffer; + int _readBufferSize; + bool _debug; + bool _isUsb; + SerialPort::Ptr _port; + + bool init(); + + uint16_t crc16Calc(const uint8_t *data, int len); + bool crc16Check(const uint8_t *blk); + void crc16Add(uint8_t *blk); + void writeXmodem(const uint8_t* buffer, int size); + void readXmodem(uint8_t* buffer, int size); + + void writeBinary(const uint8_t* buffer, int size); + void readBinary(uint8_t* buffer, int size); + +}; + + +#endif // _SAMBA_H From 1827d02e9aa989a7671d435a9b00644a45371124 Mon Sep 17 00:00:00 2001 From: Gadgeteer Date: Sun, 29 Sep 2019 13:17:22 +0100 Subject: [PATCH 2/3] Commit to wrong place --- Samba.h | 115 -------------------------------------------------------- 1 file changed, 115 deletions(-) delete mode 100644 Samba.h diff --git a/Samba.h b/Samba.h deleted file mode 100644 index 29f8f791..00000000 --- a/Samba.h +++ /dev/null @@ -1,115 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// BOSSA -// -// Copyright (c) 2011-2018, ShumaTech -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _SAMBA_H -#define _SAMBA_H - -#include -#include -#include -#include - -#include "SerialPort.h" - -class SambaError : public std::exception -{ -public: - SambaError() : exception() {}; - const char* what() const throw() { return "SAM-BA operation failed"; } -}; - - - -class Samba -{ -public: - Samba(); - virtual ~Samba(); - - bool connect(SerialPort::Ptr port, int bps = 115200); - void disconnect(); - - void writeByte(uint32_t addr, uint8_t value); - uint8_t readByte(uint32_t addr); - - void writeWord(uint32_t addr, uint32_t value); - uint32_t readWord(uint32_t addr); - - void write(uint32_t addr, const uint8_t* buffer, int size); - void read(uint32_t addr, uint8_t* buffer, int size); - - void go(uint32_t addr); - - std::string version(); - - void chipId(uint32_t& chipId, uint32_t& extChipId); - - void setDebug(bool debug) { _debug = debug; } - - const SerialPort& getSerialPort() { return *_port; } - - void reset(); - - // Extended SAM-BA functions - bool canChipErase() { return _canChipErase; } - void chipErase(uint32_t start_addr); - - bool canWriteBuffer() { return _canWriteBuffer; } - void writeBuffer(uint32_t src_addr, uint32_t dst_addr, uint32_t size); - uint32_t writeBufferSize() { return 2048; } - - bool canChecksumBuffer() { return _canChecksumBuffer; } - uint16_t checksumBuffer(uint32_t start_addr, uint32_t size); - uint32_t checksumBufferSize() { return 2048; } - uint16_t checksumCalc(uint8_t c, uint16_t crc); - -private: - bool _canChipErase; - bool _canWriteBuffer; - bool _canChecksumBuffer; - int _readBufferSize; - bool _debug; - bool _isUsb; - SerialPort::Ptr _port; - - bool init(); - - uint16_t crc16Calc(const uint8_t *data, int len); - bool crc16Check(const uint8_t *blk); - void crc16Add(uint8_t *blk); - void writeXmodem(const uint8_t* buffer, int size); - void readXmodem(uint8_t* buffer, int size); - - void writeBinary(const uint8_t* buffer, int size); - void readBinary(uint8_t* buffer, int size); - -}; - - -#endif // _SAMBA_H From 9088b707e9fc783bee108b36a8d7f86f5b530aa6 Mon Sep 17 00:00:00 2001 From: Gadgeteer Date: Sun, 29 Sep 2019 13:19:11 +0100 Subject: [PATCH 3/3] Make Bossa Compatible with 8K devices Reduce the Write Buffer to 2048 so that the stack is no overwritten during write procedure --- src/Samba.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Samba.h b/src/Samba.h index 84bea406..29f8f791 100644 --- a/src/Samba.h +++ b/src/Samba.h @@ -82,11 +82,11 @@ class Samba bool canWriteBuffer() { return _canWriteBuffer; } void writeBuffer(uint32_t src_addr, uint32_t dst_addr, uint32_t size); - uint32_t writeBufferSize() { return 4096; } + uint32_t writeBufferSize() { return 2048; } bool canChecksumBuffer() { return _canChecksumBuffer; } uint16_t checksumBuffer(uint32_t start_addr, uint32_t size); - uint32_t checksumBufferSize() { return 4096; } + uint32_t checksumBufferSize() { return 2048; } uint16_t checksumCalc(uint8_t c, uint16_t crc); private: