I have made some assumptions about the radio to get a leg up.  Keep in mind I am working from a logical argument not an understanding of python or chirp.

I am using the 760G driver set written by Pavel Milanes, tk760g.py, as a starting point to understand and open the radio.  I edited that file by copying the TK270G data and changing the model information to TK280 ...

@directory.register
class TK280G_Radios(Kenwood_Serie_60G):
    """Kenwood TK-280G Radio K/K1/M/E/NE/NT"""
    MODEL = "TK-280G"
    TYPE = "P2800"
    VARIANTS = {
        "P2800T\xff":    (128, 144, 174, "NE/NT"),   # 146-174 original
        "P2800$\xff":    (128, 144, 174, "E"),       # 146-174 original
        "P2800\x14\xff": (128, 150, 174, "M"),
        "P2800\x05\xff": (128, 136, 150, "K1"),
        "P2800\x04\xff": (128, 150, 174, "K"),
        }

This gave me the error wrong model with the message, "expected P2800 but got v2.01k instead".  So I edited the string again ...

@directory.register
class TK280G_Radios(Kenwood_Serie_60G):
    """Kenwood TK-280G Radio K/K1/M/E/NE/NT"""
    MODEL = "TK-280G"
    TYPE = "v2.01k"
    VARIANTS = {
        "P2800T\xff":    (128, 144, 174, "NE/NT"),   # 146-174 original
        "P2800$\xff":    (128, 144, 174, "E"),       # 146-174 original
        "P2800\x14\xff": (128, 150, 174, "M"),
        "P2800\x05\xff": (128, 136, 150, "K1"),
        "P2800\x04\xff": (128, 150, 174, "K"),
        }

and got a Handshake error ...

File "/usr/lib/python2.7/dist-packages/chirp/drivers/tk760g.py", line 884, in sync_in
    self._mmap = do_download(self)
  File "/usr/lib/python2.7/dist-packages/chirp/drivers/tk760g.py", line 517, in do_download
    _open_radio(radio, status)
  File "/usr/lib/python2.7/dist-packages/chirp/drivers/tk760g.py", line 501, in _open_radio
    _handshake(radio)
  File "/usr/lib/python2.7/dist-packages/chirp/drivers/tk760g.py", line 385, in _handshake
    raise Exception(mesg)
Exception: Handshake failed

from the code process at line 385 ...

def _handshake(radio, msg=""):
    """Make a full handshake"""
    # send ACK
    _raw_send(radio, ACK_CMD)
    # receive ACK
    ack = _raw_recv(radio, 1)
    # check ACK
    if ack != ACK_CMD:
        _close_radio(radio)
        mesg = "Handshake failed " + msg
        # DEBUG
        LOG.debug(mesg)
        raise Exception(mesg)

So basically the ACK failed.  If I understand the serial process this could be the form of the ACK, bit length, stop bit etc.  Could it also be the model mismatch raising it's head?

I will try a couple of other configurations to get in but suggestions are always welcome.

David Davis
KG7ZMX