cancel
Showing results for 
Search instead for 
Did you mean: 

Fastest communication interface between two STM32F7's

Maz D
Associate II
Posted on July 31, 2017 at 16:02

Hi,

I have a simple question but which causes me a little headache.

Does anyone know how I might interface two STM32F7 so that I might obtain the fastest communication between the two?

Something better than 10MBytes would be the best and 20MBytes excellent.

If my question needs more info do not hesitate to ask for clarification.

All help would be appreciated.

Thanks

#speed #interface #best #fastest #communication #stm32f7
1 ACCEPTED SOLUTION

Accepted Solutions
AVI-crak
Senior
Posted on August 01, 2017 at 10:53

Saving the area of the PCB - use two SPI interfaces on each chip. The first in master mode, the second in submission mode.

You can not think about clock synchronization. The delay will be minimal. It is important to understand, the chip that transmits information - uses the memory of a neighboring chip to store data. For this reason, the start of information exchange should occur by mutual synchronization of readiness. For example, on receiving / transmitting a number that increases on the other side.

The data exchange works through the ring buffer, the tail / head indicators are located in different parts of the access. The head pointer is read on its own memory, the tail pointer is located on the memory of a neighboring chip.

To use sets of flags is a useless occupation, tested by our own experience. Once the ideal balance is found, a new need for a fresh resource appears. This race is infinite, it just spends your time.

Without saving the PCB, an external chip, for example CY7C028-15AXC.

Work with ring buffer on external memory, without restrictions, without synchronization, without prohibitions and distortions of information. Everything is possible, except for a beautiful printed circuit board. A multi-layer printed circuit board is required - to hide the hinges.

Without saving a PCB, but with saving your own time.

Use an external FPGA chip to simulate two ported sram memory. This can be a simpler solution - than you think at first glance. After all, you have the opportunity to independently assign contact connections for the FPGA chip.

For debugging communication technology - use usart. When the software model is stable and fast - you can go to a faster interface. I'm not kidding.

View solution in original post

28 REPLIES 28
Posted on July 31, 2017 at 16:18

Shared dual-port memory.

FIFO tied to sender FSMC and receiver DCMI.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Posted on July 31, 2017 at 17:06

Hello Clive,

This a very intresting answear and had me thinking for a while. The FMC interface has one clock and 8 to 32 lines of data. Which means I dont have to agregate other types of interfaces like the SPI or I2C to have more throughput.

But if I am not wrong, this is a transmit only interface.

Whereas I need to transmit and receive on the same lines so that I may route the minium of lines between the two MCUs all the while conserving the tranmission speed.

Also by shared memory, is it a question of sharing the MCU memory or an external component (ex: DPRAM)?

Posted on July 31, 2017 at 17:57

The FSMC/FMC is a bidirectional interface. Your problem is the devices don't share a common clock domain, and there isn't a DRQ/DACK method for the DMA. DCMI does provide for a method of high speed synchronous transfers (input), fill the data source, trigger a block transfer.

You'd likely need something to mitigate the ebb/flow of data, and stage the data between the two systems

Something like this could be exploited

http://www.averlogic.com/AL422B.asp

 

Might need to gang them up to get width and directionality required.

Ask yourself why you are even approaching the problem this way, wouldn't a multi-core device with SMP/NUMA memory architecture work better. Does all the data need to be transferred back and forth?

Shoveling data between two F7 would seem to eat a lot of processing bandwidth.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
Posted on July 31, 2017 at 17:59

Whereas I need to transmit and receive on the same lines so that I may route the minium of lines between the two MCUs all the while conserving the tranmission speed.

In that case USB (High Speed) might be what you need. Another option is QUAD SPI.

Posted on July 31, 2017 at 18:04

Hello,

It is possible to have an SLAVE QUAD SPI on STM32F7 ? (Master I am pretty sure, because we can boot on an external SPI memory) 

Thanks 

Posted on July 31, 2017 at 18:41

I think one needs to turn the question on it's head and understand why the system needs to do this.

'It is not that the wind is blowing, it's what the wind is blowing!' ~ Ron White

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
T J
Lead
Posted on August 01, 2017 at 06:33

did you look at the LVDS serializers/deserializers ?  these run the data serially at 300MHz +

this will give you easily 30MHz 8 bit bus with 2/3 control lines over 4 wires for full duplex (maximum length 20cm)

LVDS chips work very well, easily, but they need some room on the PCB..

AVI-crak
Senior
Posted on August 01, 2017 at 10:53

Saving the area of the PCB - use two SPI interfaces on each chip. The first in master mode, the second in submission mode.

You can not think about clock synchronization. The delay will be minimal. It is important to understand, the chip that transmits information - uses the memory of a neighboring chip to store data. For this reason, the start of information exchange should occur by mutual synchronization of readiness. For example, on receiving / transmitting a number that increases on the other side.

The data exchange works through the ring buffer, the tail / head indicators are located in different parts of the access. The head pointer is read on its own memory, the tail pointer is located on the memory of a neighboring chip.

To use sets of flags is a useless occupation, tested by our own experience. Once the ideal balance is found, a new need for a fresh resource appears. This race is infinite, it just spends your time.

Without saving the PCB, an external chip, for example CY7C028-15AXC.

Work with ring buffer on external memory, without restrictions, without synchronization, without prohibitions and distortions of information. Everything is possible, except for a beautiful printed circuit board. A multi-layer printed circuit board is required - to hide the hinges.

Without saving a PCB, but with saving your own time.

Use an external FPGA chip to simulate two ported sram memory. This can be a simpler solution - than you think at first glance. After all, you have the opportunity to independently assign contact connections for the FPGA chip.

For debugging communication technology - use usart. When the software model is stable and fast - you can go to a faster interface. I'm not kidding.

Posted on August 01, 2017 at 09:41

Thank you for the explanation Clive.

I am realy constrained by size and I wont be able to add other components to the board. And I dont want to complicate to much the board either. I will have to go on looking for other solutions even though the FSMC/DCMI interface was promising for throughput.