On 11-05-17 14:31, Arno Steffens wrote:


Gesendet: Donnerstag, 11. Mai 2017 um 07:24 Uhr
Von: "Mike Looijmans" <mike.looijm...@topic.nl>
An: "Nathan Rossi" <nat...@nathanrossi.com>, "Arno Steffens" <s...@gmx.li>
Cc: meta-xilinx@yoctoproject.org
Betreff: Re: [meta-xilinx] SPI problem

On 10-05-17 15:23, Nathan Rossi wrote:
On 10 May 2017 at 17:18, Arno Steffens <s...@gmx.li> wrote:
Thanks Mike for the feedback.
It is an OnSemi Phyton camera chip.
Unfortunately FPGA is not suitable solution for me. The layout is already fixed 
and I am not an FPGA expert.
Checking the SPI registers in Technical Manual: it seems that there is no 
separate setting for CPOL/CPH for MOSI and MISO.
The only way I see is to send address, keep CS low, change SPI mode, read.
But there is another limitation. In struct spi_ioc_transfer there is a setting: 
bits_per_word. I need 10 for doing that
as described for the first part (9 bit adress + 1 r/w bit). This returns an error 
"could not transmit data". Any value expect 8 is returning an error.
Is this a limitation by hardware or an issue in driver, which can be fixed?

For the Zynq PS SPI controllers there is a hard limit to 8-bit words
(kernel driver advertises this here:
http://elixir.free-electrons.com/linux/latest/source/drivers/spi/spi-cadence.c#L565).

If you need 10b words and you do not want to do it with an FPGA
device, you can always use the kernels spi-bitbang module. But this is
likely only good for low bandwidth control SPI, so if you are using
SPI to pull image data from the camera this is probably not what you
want. Also you could easily modify the spi-bitbang module to handle
this CPOL inversion, such that it always samples MISO on the falling
edge.

Camera chips usually only use the SPI interface for configuration, so I'd go
with Nathan's suggestion and use Linux' bit-bang SPI controller for setting
camera parameters and such. Let the kernel pinmix the pins as GPIO and assign
them via devicetree to the bitbang controller.

Kind regards,

Mike Looijmans
System Expert

In fact it is just for configuration.
Thanks, so it is clear that I can't hope to solve it without changing the 
bitstream (although remapping is not a big deal). Do you have an idea what 
frequency can be achieved by this driver?
And I am a bit afraid of negative side-effect to more "realtime" related stuff 
on ARM.

I'd expect something in the 100kHz..1MHz range for the SPI bus. Changes to FPGA are only needed if the component is connected through logic. In which case it'd be better to completely solve it in logic and put a custom SPI (ish) controller in the FPGA that handles this chip. If SPI is connected through MIO pins, no change in logic is required (or possible actually).

I'm not too worried about the impact on other stuff, the SPI bitbang task can probably be pre-emted by any other task. I'm always using a bitbang I2C controller on the Zynq (because the hardware is broken) and haven't seen any negative effects on timing from that either.




Kind regards,

Mike Looijmans
System Expert

TOPIC Products
Materiaalweg 4, NL-5681 RJ Best
Postbus 440, NL-5680 AK Best
Telefoon: +31 (0) 499 33 69 79
E-mail: mike.looijm...@topicproducts.com
Website: www.topicproducts.com

Please consider the environment before printing this e-mail



Join our presentation at Electronics & Applications 2017:
FPGA for real-time data processing, subject “Hardware platform for industrial 
ultrasound steel plate Inspection” Topic Embedded Systems - Herman Kuster, 1st 
June 10 AM

Visit http://eabeurs.nl/author/612884/ for more information

--
_______________________________________________
meta-xilinx mailing list
meta-xilinx@yoctoproject.org
https://lists.yoctoproject.org/listinfo/meta-xilinx

Reply via email to