From: Thierry Reding <thierry.reding@avionic-design.de>
To: David Brownell <david-b@pacbell.net>
Cc: spi-devel-general@lists.sourceforge.net, linux-kernel@vger.kernel.org
Subject: Re: [spi-devel-general] [PATCH v2] spi: Add support for the OpenCores SPI controller.
Date: Wed, 29 Apr 2009 08:22:08 +0200 [thread overview]
Message-ID: <20090429062208.GA7784@avionic-design.de> (raw)
In-Reply-To: <200904281403.40757.david-b@pacbell.net>
* David Brownell wrote:
> On Tuesday 28 April 2009, Thierry Reding wrote:
> > > > I couldn't really find a way to implement per-transfer overrides for the
> > > > word size because the controller simply has no concept of word sizes. Is it
> > > > in such cases still necessary to hardwire the word size to 8 bits?
> > >
> > > Is this the http://www.opencores.org/?do=project&who=spi core?
> >
> > Yes, it is.
> >
> > > Its summary says "Variable length of transfer word up to 32 bits";
> > > does that mean "configurable when core is synthesized" instead of
> > > truly "variable"?
> >
> > That summary seems out-dated. The variable length of transfer word is
> > actually the maximum length of a single transfer and is 128 bits in the
> > latest version.
>
> So long as they don't couple "transfer" with chipselect activation
> and then de-activation, that's normal.
>
> 128 bits is pretty big, but it should make no difference to the slave
> whether the host thinks of its data as one 128-bit word, sixteen 8-bit
> words, one 9-bit word followed by a 119-bit one, or whatever.
>
> Unless the design is broken, so that you can't send words without
> flapping the chipselect. That would surprise me.
So far, what I've been doing is just copy the transmission buffer in blocks
of 16 bytes byte-by-byte to the transmission registers (concatenating groups
of four bytes), then start the transfer. After the transfer I copy the bytes
back in the same manner to the receive buffer. I was assuming that the
buffers would be in the correct byte order at that point anyway.
This core actually allows manually setting the chipselect. It also has a mode
that automatically sets or clears the chipselect for each single "transfer"
(meaning up to those 128 bits). But as you say, that wouldn't be normal
behavior and breaks things.
> > I'm not sure whether this is supposed to be the same as the word size. If it
> > is it would mean that a single transfer can always only transfer one word.
> > Which is kind of inefficient, I would think.
>
> A "struct spi_transfer" should include a arbitrary number of
> such words. If the word size is over 8 bits, all the usual
> byte ordering concerns come into play. You may optimize the
> register I/O however you like, so long as the bits on the
> wire come out in the right sequence.
What byte ordering are the transmit and receive buffers supposed to be in,
then? Native? Always big endian?
> Ignoring clock options, the canonical SPI transfer starts by
> activating a chip select, then clocking out an arbitrary number
> of bits (clocking *in* one bit for each one clocked out), and
> then de-activating chipselect. Those bits are usually viewed
> as a sequence of various-size words ... not necesarily all
> the same size. Example, some LCD controllers use 9-bit command
> words followed by pixel data encoded in bytes.
>
> Now, how the bits get to/from the controller is an area where
> silicon can optimize. For example, it's common to offload
> that work to a DMA controller that can do burst operations
> to keep the data bus efficiency high ... and to have a FIFO
> in there, so those bursts can be bigger than the word size.
I haven't experimented with using DMA transfers to this particular core
because there's currently no support for the generic DMA API on the CPU
we use.
> - Dave
Thierry
prev parent reply other threads:[~2009-04-29 6:22 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-26 8:07 [PATCH] spi: Add support for the OpenCores SPI controller Thierry Reding
2009-03-30 8:44 ` Florian Fainelli
[not found] ` <1238054874-28215-1-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
2009-04-04 19:27 ` David Brownell
2009-04-04 19:27 ` David Brownell
2009-04-28 11:01 ` [PATCH v2] " Thierry Reding
[not found] ` <1240916464-4187-1-git-send-email-thierry.reding-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
2009-04-28 11:15 ` Thierry Reding
2009-04-28 11:15 ` [spi-devel-general] " Thierry Reding
[not found] ` <20090428111532.GA14422-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
2009-04-28 11:58 ` David Brownell
2009-04-28 11:58 ` [spi-devel-general] " David Brownell
2009-04-28 12:20 ` Thierry Reding
2009-04-28 13:41 ` Florian Fainelli
2009-04-28 20:54 ` David Brownell
2009-04-29 6:31 ` Thierry Reding
2009-04-29 9:15 ` Florian Fainelli
[not found] ` <20090428122011.GB6325-RM9K5IK7kjKj5M59NBduVrNAH6kLmebB@public.gmane.org>
2009-04-28 21:03 ` David Brownell
2009-04-28 21:03 ` [spi-devel-general] " David Brownell
2009-04-29 6:22 ` Thierry Reding [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090429062208.GA7784@avionic-design.de \
--to=thierry.reding@avionic-design.de \
--cc=david-b@pacbell.net \
--cc=linux-kernel@vger.kernel.org \
--cc=spi-devel-general@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.