Port-arm archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: SPI device connection woes
On Sun, 2023-03-19 at 19:22 -0400, Brad Spencer wrote:
> Dave Tyson <dtyson%anduin.org.uk@localhost> writes:
>
> Hello....
>
> > I have been trying to interface a BMP280 to various ARM SOC's
> >
> > There is a device driver in NetBSD 10 which should drive the BMP280
> > and
> > the (more useful) BME280.
> >
> > I have wired up a couple of BMP280's to a Banana pi M1 on both the
> > I2C
> > and the SPI interface (using CS0 for the CSB).
> >
> > I put the relevant lines in /etc/modules.conf:
> > /stand/evbarm/10.0/modules/bmx280thp/bmx280thp.kmod
> > /stand/evbarm/10.0/modules/bmx280thpi2c/bmx280thpi2c.kmod
> >
> > and a reboot shows:
> >
> > Loading modules.
> > [ 4.6613337] bmx280thp0 at iic1 addr 0x76
> > [ 4.7013430] bmx280thp0: Bosch Sensortec BMP280, Chip ID: 0x58
> >
> > and envstat reports:
> >
> > bmx280thp0]
> > temperature: 23.040 degC
> > pressure: 1011.010 hPa
>
> The I2C interface looks more or less correct.
>
> > So the I2C interface is working fine, but nothing from the SPI one,
> > yet
> > the kernel seems to see it OK:
> >
> > NetBSD 10.0_BETA (GENERIC) #0: Tue Mar 7 19:57:47 UTC 2023
> > [ 1.000000] mkrepro%mkrepro.NetBSD.org@localhost:/usr/src/sys/arc
> > h/ev
> > barm/compile/GENERIC
> >
> > [ 1.000004] sunxitwi0 at simplebus1: Marvell TWSI controller
> > [ 1.000004] sunxitwi0: interrupting on GIC irq 39
> > [ 1.000004] iic0 at sunxitwi0: I2C bus
> >
> > [ 1.000004] sun4ispi0 at simplebus1: SPI
> > [ 1.000004] sun4ispi0: interrupting on GIC irq 42
> > [ 1.000004] spi0 at sun4ispi0: SPI bus
> >
> > decompiling the dtb shows the correct status (OKAY) for SPI0 and
> > the
> > pin maps look right for the default pinout on the BPI board.
> >
> > Anyone got any ideas as so far I seem to have had zero success at
> > getting any SPI devices to work :-(
> >
> > Cheers,
> > Dave
>
> It sounds like you have verified that the pins are set up correctly
> to
> allow SPI to function on your board. On a RPI device you have to add
> an
> overlay to get SPI to work.
>
> In addition to making sure that the pins are set up a further
> compilication with SPI is that it does not currently support modules
> at
> all and the bmx280thp device is not included in the GENERIC
> kernel. You
> did not mention that you compiled a new kernel, but you would have to
> do
> that adding the spi lines in for the device. This is in the man
> page,
> but you will need something like this in a kernel config and build a
> new
> kernel:
>
> bmx280thp* at spi? slave 0
>
> (you should be able to include GENERIC and just add that like to it,
> or
> you can copy the GENERIC config and add it that way)
>
> Please note that trying to use a BMx280 device on a I2C bus and
> another
> one on the SPI bus at the same time might work it is best avoid doing
> that especially if I2C is provided via a module.
Hi Brad,
Thanks for the fast response! I hadn't noticed I had to compile the SPI
driver into a kernel rather than modloading it. With it added to the
generic kernel I now see:
[ 1.000004] spi0 at sun4ispi0: SPI bus
[ 1.000004] bmx280thp0 at spi0 slave 0
[ 1.000004] sun4ispi0: ctl 0x140013, cctl 0x104a, CLK 150000000Hz,
SCLK 1000000Hz
[ 1.000004] bmx280thp0: Bosch Sensortec BMP280, Chip ID: 0x58
and the envstat command reports sensible values :-)
As an aside I did try driving this device a while ago using the
SPI_IOCTL_CONFIGURE & SPI_IOCTL_TRANSFER in userland but didn't get
very far so maybe a kernel driver is the way to go.
I do have a MAX31865 chip which allows temperatures to be read from a
pt100 probe - this is a pure SPI device. I can probably knock up a
kernel driver using your code as a guideline. Would this be a more
sensible route rather than usermode application?
Thanks again,
Dave
Home |
Main Index |
Thread Index |
Old Index