mirror of
https://github.com/TomNisbet/TommyPROM.git
synced 2024-06-01 14:41:37 +00:00
File transfer default back to XModem-CRC for #20
This commit is contained in:
parent
b131fbe8ae
commit
ec4686bfa0
|
@ -71,6 +71,7 @@ void PromDevice::resetDebugStats() {
|
||||||
debugLastAddress = 0;
|
debugLastAddress = 0;
|
||||||
debugLastExpected = 0;
|
debugLastExpected = 0;
|
||||||
debugLastReadback = 0;
|
debugLastReadback = 0;
|
||||||
|
debugStartChar = 0;
|
||||||
}
|
}
|
||||||
void PromDevice::printDebugStats() {
|
void PromDevice::printDebugStats() {
|
||||||
Serial.print(F("debugBlockWrites: "));
|
Serial.print(F("debugBlockWrites: "));
|
||||||
|
@ -81,6 +82,8 @@ void PromDevice::printDebugStats() {
|
||||||
Serial.println(debugLastExpected, HEX);
|
Serial.println(debugLastExpected, HEX);
|
||||||
Serial.print(F("debugLastReadback: "));
|
Serial.print(F("debugLastReadback: "));
|
||||||
Serial.println(debugLastReadback, HEX);
|
Serial.println(debugLastReadback, HEX);
|
||||||
|
Serial.print(F("debugStartChar: "));
|
||||||
|
Serial.println(debugStartChar, HEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
// BEGIN PRIVATE METHODS
|
// BEGIN PRIVATE METHODS
|
||||||
|
|
|
@ -28,17 +28,18 @@ class PromDevice
|
||||||
virtual void disableSoftwareWriteProtect() {}
|
virtual void disableSoftwareWriteProtect() {}
|
||||||
virtual void enableSoftwareWriteProtect() {}
|
virtual void enableSoftwareWriteProtect() {}
|
||||||
|
|
||||||
|
uint32_t debugBlockWrites; // Number of block write operations
|
||||||
|
uint32_t debugLastAddress; // Last address with an issue
|
||||||
|
uint8_t debugLastExpected; // Last expected readback value
|
||||||
|
uint8_t debugLastReadback; // Last actual readback value
|
||||||
|
uint8_t debugStartChar; // XModem start char sent or received
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
uint32_t mSize; // Size of the device, in bytes
|
uint32_t mSize; // Size of the device, in bytes
|
||||||
unsigned int mBlockSize; // Block size for page writes, zero if N/A
|
unsigned int mBlockSize; // Block size for page writes, zero if N/A
|
||||||
unsigned int mMaxWriteTime; // Max time (in ms) to wait for write cycle to complete
|
unsigned int mMaxWriteTime; // Max time (in ms) to wait for write cycle to complete
|
||||||
bool mSupportsDataPoll; // End of write detected by data polling
|
bool mSupportsDataPoll; // End of write detected by data polling
|
||||||
|
|
||||||
uint32_t debugBlockWrites; // Number of block write operations
|
|
||||||
uint32_t debugLastAddress; // Last address with an issue
|
|
||||||
uint8_t debugLastExpected; // Last expected readback value
|
|
||||||
uint8_t debugLastReadback; // Last actual readback value
|
|
||||||
|
|
||||||
void setDataBusMode(uint8_t mode);
|
void setDataBusMode(uint8_t mode);
|
||||||
byte readDataBus();
|
byte readDataBus();
|
||||||
void writeDataBus(byte data);
|
void writeDataBus(byte data);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#include "XModem.h"
|
#include "XModem.h"
|
||||||
|
|
||||||
|
|
||||||
static const char * MY_VERSION = "2.5";
|
static const char * MY_VERSION = "2.6";
|
||||||
|
|
||||||
|
|
||||||
// Global status
|
// Global status
|
||||||
|
@ -399,7 +399,7 @@ void fillBlock(uint32_t start, uint32_t end, byte val)
|
||||||
|
|
||||||
for (uint32_t addr = start; (addr <= end); addr += BLOCK_SIZE)
|
for (uint32_t addr = start; (addr <= end); addr += BLOCK_SIZE)
|
||||||
{
|
{
|
||||||
uint32_t writeLen = ((end - addr + 1) < BLOCK_SIZE) ? (end - addr + 1) : BLOCK_SIZE;
|
uint32_t writeLen = ((end - addr + 1) < BLOCK_SIZE) ? (end - addr + 1) : uint32_t(BLOCK_SIZE);
|
||||||
if (!prom.writeData(block, writeLen, addr))
|
if (!prom.writeData(block, writeLen, addr))
|
||||||
{
|
{
|
||||||
cmdStatus.error("Write failed");
|
cmdStatus.error("Write failed");
|
||||||
|
|
|
@ -9,7 +9,10 @@
|
||||||
// they did over the long distance dail-up lines that XModem was designed for. Uncomment
|
// they did over the long distance dail-up lines that XModem was designed for. Uncomment
|
||||||
// the XMODEM_CRC_PROTOCOL line below to restore the original XMODEM CRC support.
|
// the XMODEM_CRC_PROTOCOL line below to restore the original XMODEM CRC support.
|
||||||
|
|
||||||
//#define XMODEM_CRC_PROTOCOL
|
// Update!!! - Teraterm does not seem to like sending files to TommyPROM with plain
|
||||||
|
// XModem, so the default is back to CRC. For Linux, comment out the line below to use
|
||||||
|
// checksum.
|
||||||
|
#define XMODEM_CRC_PROTOCOL
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -126,6 +129,7 @@ bool XModem::SendFile(uint32_t address, uint32_t fileSize)
|
||||||
{
|
{
|
||||||
rxChar = GetChar();
|
rxChar = GetChar();
|
||||||
}
|
}
|
||||||
|
promDevice.debugStartChar = rxChar;
|
||||||
if (rxChar != XMDM_TRANSFER_START)
|
if (rxChar != XMDM_TRANSFER_START)
|
||||||
{
|
{
|
||||||
#ifdef XMODEM_CRC_PROTOCOL
|
#ifdef XMODEM_CRC_PROTOCOL
|
||||||
|
@ -222,6 +226,7 @@ bool XModem::StartReceive()
|
||||||
// seconds. If nothing is received in that time then return false to indicate
|
// seconds. If nothing is received in that time then return false to indicate
|
||||||
// that the transfer did not start.
|
// that the transfer did not start.
|
||||||
Serial.write(XMDM_TRANSFER_START);
|
Serial.write(XMDM_TRANSFER_START);
|
||||||
|
promDevice.debugStartChar = XMDM_TRANSFER_START;
|
||||||
for (int ms = 1000; (ms); --ms)
|
for (int ms = 1000; (ms); --ms)
|
||||||
{
|
{
|
||||||
if (Serial.available() > 0)
|
if (Serial.available() > 0)
|
||||||
|
@ -312,6 +317,7 @@ void XModem::SendPacket(uint32_t address, uint8_t seq)
|
||||||
Serial.write(c);
|
Serial.write(c);
|
||||||
crc = UpdateCrc(crc, c);
|
crc = UpdateCrc(crc, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XMODEM_CRC_PROTOCOL
|
#ifdef XMODEM_CRC_PROTOCOL
|
||||||
Serial.write(crc >> 8);
|
Serial.write(crc >> 8);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -94,11 +94,22 @@ received file size.
|
||||||
Once the READ or WRITE command is issued to the programmer, the transfer must
|
Once the READ or WRITE command is issued to the programmer, the transfer must
|
||||||
be started on the host program.
|
be started on the host program.
|
||||||
|
|
||||||
Note that previous versions of TommyPROM used the XMODEM-CRC protocol to complete the file
|
~~Note that previous versions of TommyPROM used the XMODEM-CRC protocol to complete the file
|
||||||
transfers for the READ and WRITE commands. This did not work well with minicom and other
|
transfers for the READ and WRITE commands. This did not work well with minicom and other
|
||||||
Linux programs that rely on the sz/rz commands. Versions 2.5 and later of TommyPROM now
|
Linux programs that rely on the sz/rz commands. Versions 2.5 and later of TommyPROM now
|
||||||
use basic XModem with the 8-bit checksum. The XModem-CRC support is still available as a
|
use basic XModem with the 8-bit checksum. The XModem-CRC support is still available as a
|
||||||
compile-time option. See [issue #19](https://github.com/TomNisbet/TommyPROM/issues/19)
|
compile-time option. See [issue #19](https://github.com/TomNisbet/TommyPROM/issues/19)
|
||||||
|
for details.~~
|
||||||
|
|
||||||
|
**UPDATE: XModem troubles continue!**
|
||||||
|
|
||||||
|
It seems that TeraTerm does not like to send files to TommyPROM in XModem checksum mode.
|
||||||
|
The default transfer has been restored to XModem-CRC mode.
|
||||||
|
* For TeraTerm, be sure to select the XModem-CRC option in the dialog box when receiving files.
|
||||||
|
* For Linux/minicom, comment out the XMODEM_CRC_PROTOCOL in XModem.cpp and use checksum mode.
|
||||||
|
|
||||||
|
Given that there are now problems with both minicomm and TeraTerm, it seems likely that the
|
||||||
|
actual problem lies somewhere in the TommyPROM code. See [issue #20](https://github.com/TomNisbet/TommyPROM/issues/20)
|
||||||
for details.
|
for details.
|
||||||
|
|
||||||
The files used for READ and WRITE are simple binary images. This can be created directly
|
The files used for READ and WRITE are simple binary images. This can be created directly
|
||||||
|
|
Loading…
Reference in New Issue
Block a user