Re: help getting SPI interface to work

2021-09-20 Thread Dave Tyson
On Monday 20 Sep 2021 09:34:21 Michael van Elst wrote:
> dty...@anduin.org.uk (Dave Tyson) writes:
> >/dev/spi0 is defined which is a good start::
> >
> >[ 1.03] sun4ispi0 at simplebus1: SPI
> >[ 1.03] sun4ispi0: interrupting on GIC irq 42
> >[ 1.03] spi0 at sun4ispi0: SPI bus
> >
> >The board has the SPI mos1/miso/clk together with cs0 and cs1.
> >
> >Looking at spi(4) there is no mention of a way to control cs0/1 to select
> >devices so I guess this is down to using gpio commands to pull the
> >appropriate pin low.
> 
> The spi driver gets an address parameter that may control which cs line
> is asserted. It depends on the hardware if that is actually used.
> 
> On these devices, the SPI controller is multiplexed on GPIO pins. You
> need to activate the function. This can be done by providing the
> proper DTB file or overlay, it _could_ also be done with the gpio
> driver (selecting an alt mode), but the sunxi gpio driver doesn't
> support that.
> 
> >command = 0  ;  /*we are not sending anything */
> >spit.sit_addr =  0x00 ;
> >spit.sit_send =  ;
> 
> if you don't send anything, use NULL.
> 
> >The device just needs the register address sending and should return a
> >single byte with the contents.
> 
> Not sure what you want to control, but most devices require a
> read command to actually send data. The read command then usually
> includes the register address, sit_addr is not the register address
> but selects a slave device.

Thanks to the info - I hadn't realised the sit_addr selected the slave device 
- will have a look at the DTB file and look to see how things are wired up in 
the kernel.

Cheers,
Dave


Re: help getting SPI interface to work

2021-09-20 Thread Michael van Elst
dty...@anduin.org.uk (Dave Tyson) writes:

>/dev/spi0 is defined which is a good start::

>[ 1.03] sun4ispi0 at simplebus1: SPI
>[ 1.03] sun4ispi0: interrupting on GIC irq 42
>[ 1.03] spi0 at sun4ispi0: SPI bus

>The board has the SPI mos1/miso/clk together with cs0 and cs1. 

>Looking at spi(4) there is no mention of a way to control cs0/1 to select 
>devices so I guess this is down to using gpio commands to pull the appropriate 
>pin low.

The spi driver gets an address parameter that may control which cs line
is asserted. It depends on the hardware if that is actually used.

On these devices, the SPI controller is multiplexed on GPIO pins. You
need to activate the function. This can be done by providing the
proper DTB file or overlay, it _could_ also be done with the gpio
driver (selecting an alt mode), but the sunxi gpio driver doesn't
support that.


>command = 0  ;  /*we are not sending anything */
>spit.sit_addr =  0x00 ;
>spit.sit_send =  ;

if you don't send anything, use NULL.


>The device just needs the register address sending and should return a single 
>byte with the contents.

Not sure what you want to control, but most devices require a
read command to actually send data. The read command then usually
includes the register address, sit_addr is not the register address
but selects a slave device.