I chose the XS1-A16A-128-FB217. Do you think I chose correctly?

New to XMOS and XCore? Get started here.
Post Reply
Buz
New User
Posts: 3
Joined: Fri Mar 03, 2017 5:22 pm

I chose the XS1-A16A-128-FB217. Do you think I chose correctly?

Post by Buz »

Hey Folks,

Brand new here and a first time using an XMOS. I am designing a board with around 80 GPIO (a couple of SPI buses in there, some PWM, a few digital sensors, nothing too exotic). I want to design in a capability to communicate over EtherCAT (very important), CAN (somewhat important), and USB (nice to have). Right now Im using the XS1-A16A-128. I've got analog signals coming in to the built in ADC and two more ADCs hanging off two separate SPI buses (for a total of three ADCs including the built-in one). Im using the Beckhoff ET1200 ASIC for EtherCAT, also haning off its own SPI bus. (There's so much GPIO on the XMOS I feel like Oprah handing out SPI buses) I am a little concerned that I basically give up an entire tile for the built in USB functionality, but if I understand correctly that is for pretty high speed USB, so I suppose its worth the pin sacrifice if I need it (and I won't really know what we need until after we field the part). Anyhow, I feel OK with the choices but I thought why not throw it out for discussion and opinions - thanks!

Jason


ahogen
Member++
Posts: 26
Joined: Fri Mar 31, 2017 5:16 pm

Post by ahogen »

If you haven't already, set up a pin assignment. We've had an issue where Ethernet line RXERR has to (understandably) be on a 1-bit port, but it was routed to a 4-bit bus. This makes it incompatible with XMOS libraries and generally much more difficult to use.

The 1-bit ports seem to run out very quickly in a design. Try to use as many bussed ports as you can. But also note that ports really aren't supposed to be bidirectional. If you need a bidir pin, such as I2C data, you can't put it on a port bus along with I2S CLK because CLK has a fixed direction.

Basically we've found lots of "gotchas" after we designed and built our PCB. Most of them discovered after writing software.

XMOS in general has been such a pain. UDP packets only send every 100ms by default (why? no idea. just their library design decision). I2S slave library has syncing issues. No C pointers in a .xc file. Just makes life very difficult when you're trying to write your own code but then have to debug and/or get inside the heads of the original developers, it feels like.

EDIT 1:

I was wrong to assume that Ethernet MDIO and MDC have to be on two 1-bit ports. See smi_singleport(...) on page 37 of "lib_ethernet [3.3.0rc1]". The SMI pins can in fact be used on a multi-bit port. I'm not sure how the library handles the port pins as a whole and whether or not the remaining, unused, pins can be used independently for something else.
Last edited by ahogen on Fri May 12, 2017 4:10 pm, edited 1 time in total.
Buz
New User
Posts: 3
Joined: Fri Mar 03, 2017 5:22 pm

Post by Buz »

Thats great feedback, thanks. I think we were lucky that we stumbled upon that ganged-up pin assignment early and (hopefully) accounted for it. It made me a little less happy about layout since traces I wanted tightly routed for common mode rejection end up split at the chip, but we like other aspects enough to deal with it. We also gave up almost half our pin count to instantiate the ULPI USBbus, which I haven't played with before. We can live with that too, but its still a sacrifice. My fingers are crossed that our coding goes a little more smoothly than your experience, but again the view from a little further down the development path is always appreciated!
Post Reply