On 7/8/09 5:05 PM, "Xiaofan Chen" <xiaof...@gmail.com> wrote:

> On Thu, Jul 9, 2009 at 5:53 AM, Gary Carlson<gcarl...@carlson-minot.com>
> wrote:
>> Zach/Spencer/Xiaofan,
>> 
>> I did some more experimentation on the latest subversion (2499) and was able
>> to tweak the jlink.c code slightly to possibly achieve three objectives:
>> 
>> 1. Make jlink dongles work under Windows for Spencer.
>> 2. Make jlink dongles work under Mac OS X for me.
>> 3. Make jlink dongles work under Linux for Zach and Xiaofan.
>> 4. Note the possible future problem that Xiaofan uncovered with libusb
>> interactions in the Linux kernel and use it in such a way that the code in
>> jlink.c won't cause future problems.
>> 
>> I have confirmed #2 and believe that #4 is satisfied.  What I don't know is
>> whether #1 and #4 are.  Could you try this out with your dongles and let me
>> know what happens?
>> 
>> If the patch works, I need to do a little cleanup but I didn't want to focus
>> on that until I knew for sure whether it would solve the issues at hand.
>> 
> 
> I will test this patch this evening.
> 
> What I am thinking now is that this patch is still strange. Typically
> the usb_set_configuration() will solve some problems for some USB
> device (say USB toggle bit problems) since it is also a light weight
> reset.
> 
> But in case usb_reset() is necessary, it is typically called during the
> closing stage.
> 
> An example I wrote before.
> http://www.microchip.com/forums/tm.aspx?m=340892
> 
> That is to say, typically you call these three instruction
> when closing the usb_handle (after you finish the operation and
> prepare for exit).
> 
> usb_release_interface(devh, 0);
> usb_rese(devh); //adding this line makes the program happy
> usb_close(devh);
> 
> 
> Which means in this case:
> 
> static void jlink_usb_close(jlink_jtag_t *jlink_jtag)
> {
> usb_close(jlink_jtag->usb_handle);
> free(jlink_jtag);
> }
> 
> becomes
> 
> static void jlink_usb_close(jlink_jtag_t *jlink_jtag)
> {
>         usb_release_interface((jlink_jtag->usb_handle,0);
>         usb_reset(jlink_jtag->usb_handle);
> usb_close(jlink_jtag->usb_handle);
> free(jlink_jtag);
> }
> 
> Could you try this?
> 
> Personally I observed that normally first launch of OpenOCD is okay
> and the subsequent launch of OpenOCD might cause startup problems.
> So this indicates that the exit may not be so clean and this leads to
> Jlink's initial status in a undesired state which even usb_set_configuration
> can not help.
> 
> But if you see the problems even during the first launch, then the above
> may not help.
> 

According the the libusb manual your use syntax is right.  However, I get
the feeling that the manual makes a deadly assumption that every software
program that uses a USB port cleans it up properly at the end.  I ran one
experiment a few days ago alternating between a USB mouse and the J-link
dongle and it caused a 100% startup failure rate in the J-link software.

I am obviously assuming that cleanup is a problem, but I will make the
concession that this is conjecture on my part without doing further
research.

I do agree with you though that if the intent is to follow the libusb manual
we should do a reset at the end in the jlink code.

If the test patch works for everyone, I can throw that in if everyone
agrees.

Gary


Gary Carlson

Gary Carlson, MSEE
Principal Engineer
Carlson-Minot Inc.







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

Reply via email to