Hi. Please review and test the solution posted here:
https://www.xcore.com/viewtopic.php?f=37&t=6053
Please post your updates and results.
DFU always fail with xu232
-
- XCore Legend
- Posts: 1913
- Joined: Thu Jun 10, 2010 11:43 am
-
- Active Member
- Posts: 44
- Joined: Fri Mar 29, 2019 3:58 am
hi, all
with our fae suppurt, now add a 24M clock to PORT_MCLK_IN, now single XUF232 DFU function works.
for our requirements, we don't need play any audio, only need usb midi device, and another problem comes can i delete all the audio ports and dfu still working? so far for usb midi device, i didn't use any of the audio ports, and it indeed works. but i am not sure for the DFU.
and dfu function failed when i xlinked XU208, the program stuck in reboot.xc below sentence:
write_sswitch_reg_no_ack(tileId, 6, pllVal);
After the two XMOS chips are xlinked, should there be some special processing during operate the two XMOS resets?
Instead of simply resetting each tile in turn as one XMOS?
any advice are appreciated.
BR,
Tony
with our fae suppurt, now add a 24M clock to PORT_MCLK_IN, now single XUF232 DFU function works.
for our requirements, we don't need play any audio, only need usb midi device, and another problem comes can i delete all the audio ports and dfu still working? so far for usb midi device, i didn't use any of the audio ports, and it indeed works. but i am not sure for the DFU.
and dfu function failed when i xlinked XU208, the program stuck in reboot.xc below sentence:
write_sswitch_reg_no_ack(tileId, 6, pllVal);
After the two XMOS chips are xlinked, should there be some special processing during operate the two XMOS resets?
Instead of simply resetting each tile in turn as one XMOS?
any advice are appreciated.
BR,
Tony
-
- XCore Addict
- Posts: 233
- Joined: Mon Jan 08, 2018 4:14 pm
Hi,
I m also experiencing lot of pain with dfu upgrade (xu216). I got it to work some time ago, but now it doesn't work anymore again.
I have identified that this is because tile1 don't want to reboot.
the device_reboot() in reboot.xc seems to work fine for rebooting tile 0 but tile1 doesn't...
any experience welcome
I m also experiencing lot of pain with dfu upgrade (xu216). I got it to work some time ago, but now it doesn't work anymore again.
I have identified that this is because tile1 don't want to reboot.
the device_reboot() in reboot.xc seems to work fine for rebooting tile 0 but tile1 doesn't...
any experience welcome
-
- XCore Addict
- Posts: 233
- Joined: Mon Jan 08, 2018 4:14 pm
Hi
I tried the run --dump-state as explained here:
https://www.xcore.com/viewtopic.php?t=4060
I saw a couple of problem with my application as the dfuhandler was distributed on another task than audio() and also the boot was stuck in ffff04c8 which meant that the xtag/jtag was the problem. finally, doing things step by step and removing the xtag after a cold boot solved it.
my reboot code is simply this one now and looks fine:
hope this helps
I tried the run --dump-state as explained here:
https://www.xcore.com/viewtopic.php?t=4060
I saw a couple of problem with my application as the dfuhandler was distributed on another task than audio() and also the boot was stuck in ffff04c8 which meant that the xtag/jtag was the problem. finally, doing things step by step and removing the xtag after a cold boot solved it.
my reboot code is simply this one now and looks fine:
Code: Select all
read_sswitch_reg(get_local_tile_id(), 6, pllVal);
pllVal &=0xFFFF;
write_sswitch_reg_no_ack(get_local_tile_id()^1, 6, pllVal);
write_sswitch_reg_no_ack(get_local_tile_id(), 6, pllVal);
-
- Active Member
- Posts: 44
- Joined: Fri Mar 29, 2019 3:58 am
Hi
DFU reboot soft reset, the principle is realized by writing the PLL register to reset the PLL; first reset the PLL where the non-localtile is located, and then reset the PLL where the localtile is located.
as to 216 there is one PLL,that is to say you only need reset once, either reset tile0 or tile1 should be ok.
now i am trying to delete the audio ports, but dfu failed when i just delete a few of them. as the function block diagram upside, the function in red circle is what we need, it seems the dfu function should be ok when i delete all the other parts. but dfu failed when i just delete just a few of audio ports.
any ideas?
DFU reboot soft reset, the principle is realized by writing the PLL register to reset the PLL; first reset the PLL where the non-localtile is located, and then reset the PLL where the localtile is located.
as to 216 there is one PLL,that is to say you only need reset once, either reset tile0 or tile1 should be ok.
now i am trying to delete the audio ports, but dfu failed when i just delete a few of them. as the function block diagram upside, the function in red circle is what we need, it seems the dfu function should be ok when i delete all the other parts. but dfu failed when i just delete just a few of audio ports.
any ideas?
You do not have the required permissions to view the files attached to this post.
-
- Active Member
- Posts: 44
- Joined: Fri Mar 29, 2019 3:58 am
Hi all
Now the audio ports only left the PORT_I2S_BCLK can not be deleted.
<!-Audio Ports->
<Port Location = "XS1_PORT_1H" Name = "PORT_I2S_BCLK" />
as long as the following p_bclk is commented out, the DFU function fails.
firmware stuck in such if inside sentences:
/* If running in application mode stop audio */
/* Don't interupt audio for save and restore cmds */
if ((DFU_IF == INTERFACE_NUMBER_DFU) && (sp.bRequest != XMOS_DFU_SAVESTATE) &&
(sp.bRequest != XMOS_DFU_RESTORESTATE))
{
printstrln("runs to here 0");
// Stop audio
outuint(c_audioControl, SET_SAMPLE_FREQ);
outuint(c_audioControl, AUDIO_STOP_FOR_DFU);
// Handshake
chkct(c_audioControl, XS1_CT_END);
}
Now the audio ports only left the PORT_I2S_BCLK can not be deleted.
<!-Audio Ports->
<Port Location = "XS1_PORT_1H" Name = "PORT_I2S_BCLK" />
as long as the following p_bclk is commented out, the DFU function fails.
firmware stuck in such if inside sentences:
/* If running in application mode stop audio */
/* Don't interupt audio for save and restore cmds */
if ((DFU_IF == INTERFACE_NUMBER_DFU) && (sp.bRequest != XMOS_DFU_SAVESTATE) &&
(sp.bRequest != XMOS_DFU_RESTORESTATE))
{
printstrln("runs to here 0");
// Stop audio
outuint(c_audioControl, SET_SAMPLE_FREQ);
outuint(c_audioControl, AUDIO_STOP_FOR_DFU);
// Handshake
chkct(c_audioControl, XS1_CT_END);
}
-
- New User
- Posts: 3
- Joined: Wed Jun 28, 2023 10:25 am
xu208 dfu also not work;
env: win 10 22H2; dfu win driver: Zadig, WinUSB(v6.1.7600....);
# win program(simple):
err = libusb_init(nullptr);
err = find_xmos_device_set_device_handle_and_dfu_interface_num(my_xmos_device_pid);
err = libusb_claim_interface(
XMOS_DEVICE_HANDLE, XMOS_DFU_INTERFACE_NUM);
let_xmos_reset_into_dfu_mode():
int nread = libusb_control_transfer(
XMOS_DEVICE_HANDLE,
DFU_REQUEST_TO_DEV, XMOS_DFU_RESETINTODFU,
0, XMOS_DFU_INTERFACE_NUM,
NULL, 0, 0);
I drew a development pcb board myself, without xtag, I lighted the LEDs in the following places,
Does not light up after chkct(c_audioControl, XS1_CT_END);
# xmos:
if (interfaceNum == DFU_IF) {
int reset = 0;
if ((DFU_IF == INTERFACE_NUMBER_DFU) &&
(sp.bRequest != XMOS_DFU_SAVESTATE) &&
(sp.bRequest != XMOS_DFU_RESTORESTATE)){
// light:
port_enable(led_0);
port_out(led_0, 1);
// Stop audio
outuint(c_audioControl, SET_SAMPLE_FREQ);
outuint(c_audioControl, AUDIO_STOP_FOR_DFU);
// light:
port_enable(led_1);
port_out(led_1, 1);
// Handshake
chkct(c_audioControl, XS1_CT_END);
// not light
port_enable(led_2);
port_out(led_2, 1);
}// if DFU_IF == ...
result = DFUDeviceRequests(
ep0_out, &ep0_in, &sp, null,
g_interfaceAlt[sp.wIndex],
dfuInterface, &reset);
......
env: win 10 22H2; dfu win driver: Zadig, WinUSB(v6.1.7600....);
# win program(simple):
err = libusb_init(nullptr);
err = find_xmos_device_set_device_handle_and_dfu_interface_num(my_xmos_device_pid);
err = libusb_claim_interface(
XMOS_DEVICE_HANDLE, XMOS_DFU_INTERFACE_NUM);
let_xmos_reset_into_dfu_mode():
int nread = libusb_control_transfer(
XMOS_DEVICE_HANDLE,
DFU_REQUEST_TO_DEV, XMOS_DFU_RESETINTODFU,
0, XMOS_DFU_INTERFACE_NUM,
NULL, 0, 0);
I drew a development pcb board myself, without xtag, I lighted the LEDs in the following places,
Does not light up after chkct(c_audioControl, XS1_CT_END);
# xmos:
if (interfaceNum == DFU_IF) {
int reset = 0;
if ((DFU_IF == INTERFACE_NUMBER_DFU) &&
(sp.bRequest != XMOS_DFU_SAVESTATE) &&
(sp.bRequest != XMOS_DFU_RESTORESTATE)){
// light:
port_enable(led_0);
port_out(led_0, 1);
// Stop audio
outuint(c_audioControl, SET_SAMPLE_FREQ);
outuint(c_audioControl, AUDIO_STOP_FOR_DFU);
// light:
port_enable(led_1);
port_out(led_1, 1);
// Handshake
chkct(c_audioControl, XS1_CT_END);
// not light
port_enable(led_2);
port_out(led_2, 1);
}// if DFU_IF == ...
result = DFUDeviceRequests(
ep0_out, &ep0_in, &sp, null,
g_interfaceAlt[sp.wIndex],
dfuInterface, &reset);
......
-
- New User
- Posts: 3
- Joined: Wed Jun 28, 2023 10:25 am
ok, test upgrade final. 710 -> 711;
just delete if ((DFU_IF == INTERFACE_NUMBER_DFU) && xxx {};
let it not run chkct(c_audioControl, XS1_CT_END);
dfu ok, but the audio no,
I think the problem is in the window usb driver;
edit it later;
Last edited by gamefunc on Wed Jun 28, 2023 1:22 pm, edited 2 times in total.
-
Verified
- XCore Legend
- Posts: 1149
- Joined: Thu Dec 10, 2009 9:20 pm
- Location: Bristol, UK
This is a very old thread, I'd probably start a new one..
Technical Director @ XMOS. Opinions expressed are my own