Hi Eric,

I have worked a little on the jlink stuff in the past and fixed a few
problems with OpenOCD.  I have a new project that is going to force me to
buy an unrestricted Segger very shortly since my current jlink dongles are
Atmel-only devices.  Once I get my hands on a new one, I hopefully will be
able to take a look at this problem also.

I will try to contact Segger on Monday to see if they can shine some light
on V8 communication details.  I suspect whatever is wrong is probably minor,
but will take a little persistence to identify a solution.

Gary



On 8/13/11 7:59 AM, "Eric Wetzel" <thewet...@gmail.com> wrote:

> On Fri, Aug 12, 2011 at 12:45 PM, Xiaofan Chen <xiaof...@gmail.com> wrote:
>> On Sat, Aug 13, 2011 at 12:02 AM, Eric Wetzel <thewet...@gmail.com> wrote:
>>> I'm going to try to use the Linux software from Segger with the
>>> kernel's usbmon to capture some commands and see what Segger's doing
>>> that we're not. (I've never done any of that before, so I don't expect
>>> good results).
>> 
>> I think this may be a good method for now -- reverse engineering.
>> 
>> On the Segger J-Link Linux utility side, you can use usbmon. On
>> the OpenOCD Linux side, you can use usbmon as well but you
>> may want to use the  "--enable-verbose-usb-comms" build option
>> which enables verbose USB communication messages for
>> USB communication debugging.
>> 
>> Actually I think a easier way is now that you know 4.14g and
>> lower firmware versions work whereas 4.14h and higher version
>> firmware versions do not work. So a debug capture from OpenOCD
>> may be already good enough to pinpoint the problem
>> (with the "--enable-verbose-usb-comms" build option).
>> 
>> An example from Spen last time. You can see that thread helped.
>> http://lists.berlios.de/pipermail/openocd-development/2009-May/007464.html
>> 
>> At that time, a lot of work were done to help bring J-Link to
>> better working status. And it worked much better with Gary's patches
>> including the patches in this thread.
>> http://lists.berlios.de/pipermail/openocd-development/2009-July/009397.html
>> 
>> So hopefully more people will jump in this time to fix this V8 issue. :-)
>> 
> 
> Alright, I didn't get around to trying your method yet; I've been
> capturing things from Segger's J-Link Linux program. Here's what I
> found.
> 
> Segger's program sends two commands that are undocumented by the
> J-Link USB Protocol Reference Manual.
> 
> The first is 0xE6, which returns 256 bytes of data. The first four
> bytes returned are the serial number of my unit, and the next row,
> starting from byte 16, is a null-terminated string of the OEM's name
> (in my case 'IAR').
> 
> The next undocumented command is 0x09. It seems to consist of 14 bytes
> and returns 76 bytes (but for some reason, my usbmon log is being
> truncated to just 64 bytes). Neither the command nor the response seem
> to contain ASCII strings. For my test cases, I ran the J-Link program,
> waited for it to stabilize, then exitted. I tested conditions like the
> first execution after plugging in the J-Link and successive
> executions, and having a target connected or not. Here are the forms
> of the 0x09 commands (responses not included):
> jlink-trace.txt: 0964a20c 00000000 00000000 0000
> jlink-trace.txt: 0964a20c 00000000 00000000 0300
> jlink-trace.txt: 0964a20c 00000000 00000000 0300
> jlink-trace.txt: 0965a20c 00000000 00000000 0300
> segger-after-plug-no-target.txt: 0964850e 00000000 00000000 0000
> segger-after-plug-no-target.txt: 0964850e 00000000 00000000 0200
> segger-after-plug-no-target.txt: 0965850e 00000000 00000000 0200
> segger-after-plug-target.txt: 0964890e 00000000 00000000 0000
> segger-after-plug-target.txt: 0964890e 00000000 00000000 0300
> segger-after-plug-target.txt: 0964890e 00000000 00000000 0300
> segger-after-plug-target.txt: 0965890e 00000000 00000000 0300
> segger-first-plug-no-target.txt: 09647f0e 00000000 00000000 0000
> segger-first-plug-no-target.txt: 09647f0e 00000000 00000000 0100
> segger-first-plug-no-target.txt: 09657f0e 00000000 00000000 0100
> segger-first-plug-target.txt: 0964970e 00000000 00000000 0000
> segger-first-plug-target.txt: 0964970e 00000000 00000000 0100
> segger-first-plug-target.txt: 0964970e 00000000 00000000 0100
> segger-first-plug-target.txt: 0965970e 00000000 00000000 0100
> 
> Within the context of a regular initialization, here is the sequence
> of commands:
> de2be100 3371054452 S Bo:2:005:2 -115 1 = 01      // EMU_CMD_VERSION
> de2be100 3371057679 S Bo:2:005:2 -115 1 = 01      // EMU_CMD_VERSION
> de2be100 3371060740 S Bo:2:005:2 -115 1 = 01      // EMU_CMD_VERSION
> de2be100 3371063805 S Bo:2:005:2 -115 1 = e8      // EMU_CMD_GET_CAPS
> de2be100 3371065738 S Bo:2:005:2 -115 1 = ed      // EMU_CMD_GET_CAPS_EX
> de2be100 3371067748 S Bo:2:005:2 -115 1 = 01      // EMU_CMD_VERSION
> de2be100 3371070732 S Bo:2:005:2 -115 1 = e6      // ?? EMU_CMD_VENDOR_INFO
> de2be100 3371072735 S Bo:2:005:2 -115 1 = f2      // EMU_CMD_READ_CONFIG
> de2be100 3371076367 S Bo:2:005:2 -115 1 = f0      // EMU_CMD_GET_HW_VERSION
> de2be100 3371077864 S Bo:2:005:2 -115 14 = 0964970e 00000000 00000000
> 0000  // ???
> de2be100 3371079765 S Bo:2:005:2 -115 14 = 0964970e 00000000 00000000
> 0100  // ???
> de2be100 3371081737 S Bo:2:005:2 -115 2 = c7ff    // EMU_CMD_SELECT_IF
> de2be100 3371083676 S Bo:2:005:2 -115 2 = c700    // EMU_CMD_SELECT_IF
> de2be100 3371085742 S Bo:2:005:2 -115 1 = dd      // EMU_CMD_HW_RESET1
> de2be100 3371086703 S Bo:2:005:2 -115 1 = df      // EMU_CMD_HW_TRST1
> de2be100 3371087669 S Bo:2:005:2 -115 3 = 050400  // EMU_CMD_SET_SPEED
> de2be100 3371088680 S Bo:2:005:2 -115 1 = c0      // EMU_CMD_GET_SPEEDS
> de2be100 3371090759 S Bo:2:005:2 -115 3 = 050400  // EMU_CMD_SET_SPEED
> de2be100 3371092973 S Bo:2:005:2 -115 1 = 07      // EMU_CMD_GET_STATE
> de2be100 3371094889 S Bo:2:005:2 -115 3 = 056400  // EMU_CMD_SET_SPEED
> de2be100 3371095853 S Bo:2:005:2 -115 2 = c7ff    // EMU_CMD_SELECT_IF
> de2be100 3371097826 S Bo:2:005:2 -115 5 = c2020000 00  // EMU_CMD_GET_COUNTERS
> de2be100 3371099987 S Bo:2:005:2 -115 1 = 07      // EMU_CMD_GET_STATE
> de2be100 3371101756 S Bo:2:005:2 -115 194 = cf00f802 ffffffff ffffff3c
> e7df0000 00000000 00000000 00000000 00000000  // EMU_CMD_HW_JTAG3
> 
> I haven't comapred this sequence against OpenOCD's J-Link
> initialization sequence, but I wager that we do not read the version
> string 3 times in a row, so there are some differences. You'll notice
> that there are two 0x09 commands right in the middle. After the end of
> this log, all the other commands are EMU_CMD_HW_JTAG3 until I exit. On
> exit, there is a little bit of clean up, which includes two more 0x09
> commands.
> 
> Here are a couple responses, though, as I mentioned, I think they're
> being truncated because usbmon reports that they're returning 76
> bytes, but there are only 32 there.
> segger-first-plug-target
> cmd: 0964970e 00000000 00000000 0000
> rsp: 01000400 10000400 970e0000 00000000 00000100 78400000 00000000 00000000
> cmd: 0964970e 00000000 00000000 0100
> rsp: 01000400 10000400 970e0000 00000000 00000100 79400000 00000000 00000000
> 
> If anybody has a contact at Segger, could you ask them to update their
> documentation?
> 
> ~Eric
> _______________________________________________
> Openocd-development mailing list
> Openocd-development@lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/openocd-development




_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to