📄 avriceprotocol.txt
字号:
/* * avrjtag - The "avrjtag" program. * Copyright (C) 2001 Scott Finneran & Peter Jansen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. * * This file contains the AVR JTAG ICE protocol documentation. */AVR JTAG-ICE serial protocol commandsBackground: This document outlines the results of a reverse engineeringeffort of the protocol which exists between AVRStudio and the AVRJTAG-Ice.Something to note is that the protocol supports dynamic bitratechanges. AVRStudio does indeed change the bitrate "mid-stream".Specifically, it seems to speed it up to 115200bps just prior todownloading (and possibly uploading) blocks of date to theJTAG-Ice. After the download, the bitrate is restored to 19200bps.This can make Analysing the protocol somewhat painful using a serial linesniffer.Something that the document does lack is detail on the "state" orprocedural aspect of the protocol. ie "This command must be proceededby blah blah...."Most commands are of the format <letter> [operands....]. An assumptionwas made that the letters actually mean something (ie W for write, R forread).***************************************************************Hints for those wishing to help with understanding the protocol:The thing that made understanding the protocol difficult, is that itswitches bitrates when writing to memory. As such, a traditionalprotocol analyser or line monitor (which connects to the serial lineitself) will lose sync when this happens!.One work-around for this is to use a program like HHD Serial Monitor(http://www.hhdsoftware.com). Rather than involve serial hardware, thisprogram captures the MS-Windows serial driver requests. As such, you cansee the data sent and received, without worrying about bitrate changes(although you can see driver config requests also, so you know when ithappens).***************************************************************Formatting:All commands from the Host end in a Space, Space (shown below as '__')All commands from the JTAG box start with a 'A' and end in a 'A', exceptwhen writing to memory, a 'A''A' is sent only after the data iswritten.Things in [] are hex characters. eg [42] [FA]Underscores '_' indicate a space. Actual spaces in the text below arefor the purposes of formatting only.Serial port works at 19200, N 8 1 (until the bitrate change command is issued)****************************************************************This command is either sync (ie serial line sync) or status orsomething. The first command also appears to have a few spaces sent downfirst. Haven't quite worked it out yet.S__ : Sync A AVRNOCD A - the reply****************************************************************Query:These commands start with a ASCII 'q' (ie [71])qz__ : query HW version A [c0] A - the replyq [7B] __ : query SW version A [66] Aq [84] __ : query supply voltage A [xx] A - the reply voltage = xx/41q [A7] __ : ???? A [3f] Aq [A8] __ : ???? A [20] Aq [A9] __ : ???? A [70] Aq [AA] __ : ???? A [29] A****************************************************************Appears to somehow configure the JTAG box. The data probably changes fordifferent processors.[A0] [.(123 bytes).....] __ : ???? A A****************************************************************[A3] __ : Enable program mode. A A****************************************************************[A4] __ : Disable program mode. A A****************************************************************[A5] __ : Erase program memory. Program mode must be enabled. A A****************************************************************R [cc] [x][x][y][y] __ : Read memory where cc is command [B2] - Fuse Bits [B3] - Lock Bits [B4] - Signature Bits [A0] - Program memory if Prog Mode enabled (read words) [B0] - Program memory if Prog Mode disabled (read words) [20] - Data Memory [22] - EEPROM x x is the number of locations - 1 (little endian) *1 *2 y y is the start address (big endian) A [....(data)....] [00] A *1 For data memory, the data returned is a series of bytes (endian-ness does not apply). For prog memory, the data returned is a 16-bit big endian.*1 note: For program memory each location is 16 bits. As such, it will return N words, rather than bytes. These words are little endian. For data space, locations are 8 bits wide, so N bytes are returned.*2 AVRStudio only requests 0xff bytes at a time. The reliability of the system to respond to larger numbers is unknown.****************************************************************W [cc] [x][x][y][y] __ : Write memory where cc is command [A0] - Program memory if Prog Mode enabled (write words) [B0] - Program memory if Prog Mode disabled (write words) [B2] - Fuse Bits [B3] - Lock Bits [B4] - Signature Bits [20] - Data memory (write bytes) [22] - EEPROM [60] - first program break point at location y y this needs the data [01] for the following h command x x is the numer of locations - 1 (little endian) y y is the start address (big endian) The reply to this command is a single A Then the Host sends h [....(data)....] __ which is the data The reply is A A (success) or E E (failure). ONLY IN THE CASE OF PROG SPACE WRITE: The data is written into the flash when the flash programming buffer (2048 bits/256 bytes/128 words) is filled. As such, in the event of a prog space page being smaller than an entire page (ie < 0x7F words), AVRStudio sends down a single write to the last location in the page.notes: - For program memory each location is 16 bits. As such, N words (rather than bytes) need to be sent. These words are little endian. - The object files output from both AVRStudio & GCC are already word-wise little endian.****************************************************************3 [x][x][x] __ : set PC A A : where xxx is the new value for the PC.****************************************************************2 __ : get next PC A [x][x][x] A : where xxx is the next location to execute (?) NOTE: APPEARS TO BE INVALID WHEN THE LAST INSTRUCTION WAS A BRANCH.****************************************************************1 __ : single step command A A****************************************************************G __ : go command The JTAG box replies immediately with a single A If breakpoints have been configured, and a breakpoint "hits", the JTAG box will send B [00] [BP] [BP] - which breakpoint was "hit" (refer breakpoint below). [04] - Breakpoint X [08] - Breakpoint Y [10] - Breakpoint Z****************************************************************F __ : finish (halt) A [00][PCL][PCH] A [PCL] - PC Low byte [PCH] - PC High byte****************************************************************x __ : ??? A A****************************************************************"Box Config" commandsThese appear to be set actions performed on various configurationregisters withing the box itself. The generic command appears to be:B [rn] [val] __ : Box Config where rn is the register number, val is the value written. [FD] - ??? [FF] - ??? [FA] - ??? [00] - ??? [62] set bit rate. val = (FA: 19200, FF: 115200) [86] set JTAG port bitrate (AVRStudio calls this the debug freq.) val = (FA: 100kHz, F3: 50kHz, FD: 200kHz) [81] [00] Written after modifying the PC. [A1] set break on branch/skip (will run until the next branch/skip instruction) [A2] val = Breakpoint X Address -High [A3] val = Breakpoint X Address -Low [A4] val = Breakpoint Y Address -High [A5] val = Breakpoint Y Address -Low [A6] val = BP mode (see Breakpoints below) [88] val = ?? (related to config bits. refer below). [89] val = ?? (related to config bits. refer below). [8A] val = ?? (related to config bits. refer below).Programming Mode.The following sequence (according to AVRStudio), prepares the chip forJTAG programming. It appears to only happen once per session (whenprogramming mode is enabled). Send: [42] [88] [00] [20] [20] Reply: [41] [41] Send: [42] [89] [01] [20] [20] Reply: [41] [41] Send: [42] [8A] [08] [20] [20] Reply: [41] [41]Chip Config (Fuse, Signature and Lock) Bits: These are access using the normal read & write commands using "special" address space identifiers.Fuse Bits: Fuse bits are written/read by accessing address zero of the [B2] address space.Signature Bits: Signature bits are written/read by accessing address zero of the [B4] address space.Lock Bits: Lock bits are written/read by accessing address zero of the [B3] address space.Breakpoints: note: AVRStudio's first breakpoint is set by writing a 1 to the desired break address using address space 60 (refer Write command). I believe a corresponding write of zero will clear this breakpoint.This is a code space breakpoint only. Where BP mode is a bitmask formatted thusly (don't you think the word thusly doesn't get used enough in doco?): ------------------------------------------------- | | | | | | | | 0 | Mask| BP Active | BP Mode | BP Mode | | | Mode| | | (BP X) | (BP Y) | ------------------------------------------------- Mask Mode: [0] = X & Y are seperate Breakpoints (non-masked mode). [1] = X is masked with Y to create a single range of breakpoint addresses. BP Active: [00] = No breakpoints enabled [01] = Masked Mode (must be set to this value if Mask Mode = 1). [10] = 1 Breakpoint (Breakpoint X active only) [11] = 2 Breakpoints (Breakpoints X & Y active) BP Mode: [00] = Data Space Read [01] = Data Space Write [10] = Data Space Read/Write (ie Data Access) [11] = Program Space Read Examples: [2C] - Single program BP at [x][x] [3F] - two break points at [x][x] and [y][y] [28] - single data R/W BP at [x][x] [20] - single data R BP at [x][x] [24] - single data W BP at [x][x] [34] - two data BP's one R at [x][x] and one W at [y][y] [35] - two data BP's one R at [x][x] and one R at [y][y] [53] - Masked program read BP at [x][x] mask [y][y] [50] - Masked data read BP at [x][x] mask [y][y] [51] - masked data write BP at [x][x] mask [y][y] [52] - masked data RW BP at [x][x] mask [y][y] The reply is A A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -