Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Mar 2017 19:38:54 +0100
From:      Gergely Czuczy <gergely.czuczy@harmless.hu>
To:        freebsd-hackers@freebsd.org
Subject:   SPI communication from userspace
Message-ID:  <313fdb93-92c6-609f-57c9-3dec0ce84798@harmless.hu>

next in thread | raw e-mail | index | archive | help
Hello,

I would like to ask for some help, on how to communicate with an 
Adafruit MAX31856 breakout board over the SPI bus under freebsd, on an 
RPi3. As far as I can see, the spibus(4) driver is there, but there's no 
driver for this chip, and I can't access the SPI calls from userspace 
either. I could try to write a driver, however I don't have the 
experience working with the FreeBSD kernel.

SPI communication is quite simple, you send a single byte to the device, 
and if the MSB was 1 it's a write, if it's 0 it's a read operation, 
remaining 7 bits is the address. Then you either write a byte to the 
address, or wait for the device to respond by the next cycle.

Other difficulty is, the RPi3 provides 2 PINs for CS, and I have 3 
devices, so I either have to use generic GPIO PINs, or de/multiplex it, 
which might require a userspace call for device selection on the bus.

So, how should I start? What would be a good way to do the 
userspace-kernelspace communication? Also, I'm not sure whether I should 
do a specific driver for this device, or a generic one, and writing the 
specifics in userspace.

Also, if you could point me to some documentation which would explain 
how to work with the kernel, make a custom module, the possible 
user/kernelspace communication possibilities, and how to call another 
kernel module's functions, would be quite appreciated. Also, if someone 
knows where could I find docs on the spibus driver, would be quite nice 
since, it's just code so far.

Best regards,
Gergely




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?313fdb93-92c6-609f-57c9-3dec0ce84798>