Go Down

Topic: SPI multi master (Read 6603 times) previous topic - next topic

TomS

Hello friends,

thanks for all the input!

Nick:
I agree that the master/slave definition in this case is a little off, but usually the one who initiates the communication would be called the master which is why I chose the above labeling.

I did some tests with I2C but it wasn't fast enough for the application I had in mind.


Graynomad:
missing a reading now and then will not be a problem as long as it doesn't happen too often.
Basically it is a low resolution large sensor array that will track objects and since I am aiming for high sampling rate an occasional lost or corrupt reading will be updated soon during the next cycle (or can even be corrected through interpolation on the software side).
So as long as it is the exception to miss a reading it won't matter.

[side note: I am aware that there seem to be a lot of different or "better" approaches like using cmos-sensors, cameras etc. but this design has been chosen for specific reasons and cannot be replaced]


CrossRoads:
Thank you very much for the schematics, it looks very interesting.


I think I will first try to reduce the total amount of modules in the system and then see if I can get this synchronization to work.

Thanks again for all the input, it is much appreciated! :)
Have a nice weekend!
Tom

Nick Gammon


I did some tests with I2C but it wasn't fast enough for the application I had in mind.


I was merely suggesting that I2C should be used to send a single byte (which would be fast) to notify the "central CPU" that the "peripheral" had data. After that you could use SPI for the actual transfer.
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

Graynomad

Quote
low resolution large sensor array

Then if you can drop to 8-bits that will double the speed or more.

______
Rob
Rob Gray aka the GRAYnomad www.robgray.com

Frédéric_Plante

#18
Jun 15, 2016, 07:19 am Last Edit: Jun 15, 2016, 07:22 am by Frédéric_Plante
I think your idea of the masters polling the SS line is good.
Use 2 pins to do it tho - one that is the SS output, have it drive an open collector driver that goes low out to the slave, and connect the open collector output to another input that you poll to see if it is free.
The open collector can just be a simple NPN transistor, drive the base high, pullup resistor for the high signal.  You will then drive SS high from the Arduino to start your transmission, and low to end, the slave will see that as the regular low & high.
Then you will not have to switch modes on the pin to see if the line is free. Either use a good fast transistor, or an IC equivalent such as 74LS06
http://focus.ti.com/lit/ds/symlink/sn74ls06.pdf

As to how to keep more than one master from starting at the same time- can the masters talk to each other directly?
Then you could make a ring of comm's - 1 pulls SS low to start, and is connected to 2, pulling a line low to let 2 know it has started and stopped. 2 does the same to 3, which does the same to 4, etc, all way around until 10 gets back to 1 to start the process over. And maybe that line is just the pre-buffered SS line.  On power up, all would have to wait until 1 was ready to go to begin.
How far apart are the masters and slave?
I think the I2C network is totally meant to do that. I mean, using chips like PCF8574/PCF8575 to do multi chip select handling from multi SPI master to multi SPI slave. This way you can check from away if the SS/cs pin is in use and if not set/unset it.
As we fight our way northward into the great unknown, only that one thing remains certain...

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy