Page 2 of 2

Re: why ATAT RX clock invalid when run MIDI on xu224 board

Posted: Fri Sep 15, 2017 4:38 am
by susanyin0501
Hi infiniteimprobability
In this project, i have an other issue, DFU can't download image. would you please give some advices, thanks
we found DFU_mode_active can't be set, and maybe device_reboot( ) have some problem.
the following souce just can loop 1 time, the second time just can read_sswitch_reg( ), but can't write_sswitch_reg( ) then exit loop


void device_reboot_aux(void)
{
#if (XUD_SERIES_SUPPORT == XUD_U_SERIES)
/* Disconnect from bus */
unsigned data[] = {4};
write_periph_32(usb_tile, XS1_SU_PERIPH_USB_ID, XS1_SU_PER_UIFM_FUNC_CONTROL_NUM, 1, data);

/* Ideally we would reset SU1 here but then we loose power to the xcore and therefore the DFU flag */
/* Disable USB and issue reset to xcore only - not analogue chip */
write_node_config_reg(usb_tile, XS1_SU_CFG_RST_MISC_NUM,0b10);
#else
unsigned int pllVal;
unsigned int localTileId = get_local_tile_id();
unsigned int tileId;
unsigned int tileArrayLength;

/* Find size of tile array - note in future tools versions this will be available from platform.h */
asm volatile ("ldc %0, tile.globound":"=r"(tileArrayLength));

/* Reset all remote tiles */
for(int i = 0; i< tileArrayLength; i++)
{
/* Cannot cast tileref to unsigned! */
tileId = get_tile_id(tile);

/* Do not reboot local tile yet! */
if(localTileId != tileId)
{
read_sswitch_reg(tileId, 6, pllVal);
pllVal &= PLL_MASK;
write_sswitch_reg_no_ack(tileId, 6, pllVal);
}
}
/* Finally reboot this tile! */
read_sswitch_reg(localTileId, 6, pllVal);
pllVal &= PLL_MASK;
write_sswitch_reg_no_ack(localTileId, 6, pllVal);
#endif
}

Re: why ATAT RX clock invalid when run MIDI on xu224 board

Posted: Fri Sep 15, 2017 10:00 am
by infiniteimprobability
Glad things have improved.

Hmm - OK DFU can also use channel but this should only be the case if USB is not on the same tile as the flash. I think USB is on tile 0 for you so should be OK and it will not need an extra channel.

It may be something to do with the order of reboot if that is not getting through the loop. You need to reboot the furthest away tiles first and then yourself last. Try reversing the for loop..

Re: why ATAT RX clock invalid when run MIDI on xu224 board

Posted: Mon Sep 18, 2017 1:10 pm
by infiniteimprobability
Actually thinking about this further - this code will get the wrong result for XS2 (xcore200) where there are more than 2 tiles in the system
On your device there are two tiles per PLL and so two will get reset at the same time. So we only need to make 2 resets.

To work around this you will need to first reset the two remote tiles (2/3) using

Code: Select all

i = tileArrayLength - 1
and then reset tiles 0/1 using

Code: Select all

i = 0
Please try this and let me know if it works.

We will file a bugzilla to update this in the future.

Re: why ATAT RX clock invalid when run MIDI on xu224 board

Posted: Wed Sep 20, 2017 2:11 am
by susanyin0501
Hi infiniteimprobability,

you are right, first reset remote tiles ( just one tile is OK), then reset local tile, DFU can work well.

by the way, usually xu224 and xu232 binary code is more than 64K, so need setting FLASH_MAX_UPGRADE_SIZE=128*1024 in Makefile

Thanks for your strong support and help!

{

i = tileArrayLength -1 ;
/* Cannot cast tileref to unsigned! */
tileId = get_tile_id(tile);

/* Do not reboot local tile yet! */
if(localTileId != tileId)
{
read_sswitch_reg(tileId, 6, pllVal);
pllVal &= PLL_MASK;
write_sswitch_reg_no_ack(tileId, 6, pllVal);
}
}


/* Finally reboot this tile! */
read_sswitch_reg(localTileId, 6, pllVal);
pllVal &= PLL_MASK;
write_sswitch_reg_no_ack(localTileId, 6, pllVal);

Re: why ATAT RX clock invalid when run MIDI on xu224 board

Posted: Wed Sep 20, 2017 8:59 am
by infiniteimprobability
Glad it's working!
Thanks for the info about 64kB limit too. That was originally an optimisation to reduce time spent waiting for erase and number of images you can fit in small (1Mb) SPI (just 2) but this is less relevant now we have modern 8Mb QSPI devices..