Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spi not working! #1

Open
ralitra opened this issue Feb 14, 2017 · 6 comments
Open

Spi not working! #1

ralitra opened this issue Feb 14, 2017 · 6 comments

Comments

@ralitra
Copy link

ralitra commented Feb 14, 2017

Okay, at this point I can say that I've tried pretty much everything. I've searched all over on the internet and I can't get the spi1 to work through the WiringOP libs on my OrangePi Zero!

Is there anyone out there who was able make the magic? Can you helpe me?

ps.: In the armbian version I am using, the spidev1.0 already exists, so I think the problem is not activating it.

Thanks in advance!
Greetings.

Rafael

@g2pmas
Copy link
Contributor

g2pmas commented Jun 1, 2017

I submitted a PR about that.

@GreenOceanCZ
Copy link

Hi i try
#gpio load spi
modprobe: FATAL: Module spi-sun7i not found.
gpio: Unable to load spi-sun7i

this can be repare in https://github.com/xpertsavenue/WiringOP-Zero/blob/master/gpio/gpio.c ("/dev/spidev0.1" ´=> "/dev/spidev1.0") + cant find eqvivalent modpro for this cpu(spi-sun8i)

@batmaca
Copy link

batmaca commented Sep 5, 2017

Hi folks,

You guys could solve the problem or still same?

I am about to crush this little toy. I have been searching more than 10 days but STILL "unable to open spidev1.0"

I have checked every line of this code manually to find something wrong but NEIN. If you solved the problem show some ways.

Thanks buddies.

@sanjuruk
Copy link
Contributor

It is working

@pm-cz
Copy link

pm-cz commented Dec 30, 2019

I had a problem when trying to use SPI part for communication with SpaceTeddy's CC1101, but only with this library on OPI Zero (after fixing the SPI speed), not the original zhaolei/WiringOP one on OPI1. So I dug into the differences and this patch is what fixed the library and made it working on OPI0 (I guess the memset part). I would issue a PR, but since they do not seem to be processed, I am including it here.

diff --git a/wiringPi/wiringPiSPI.c b/wiringPi/wiringPiSPI.c
index 4a48cd5..abde2aa 100644
--- a/wiringPi/wiringPiSPI.c
+++ b/wiringPi/wiringPiSPI.c
@@ -28,6 +28,7 @@
 #include <errno.h>
 #include <string.h>
 #include <sys/ioctl.h>
+#include <asm/ioctl.h>
 #include <linux/spi/spidev.h>
 
 #include "wiringPi.h"
@@ -40,9 +41,8 @@
 
 const static char       *spiDev0  = "/dev/spidev0.0" ;
 const static char       *spiDev1  = "/dev/spidev1.0" ;
-const static uint8_t     spiMode  = 0 ;
-const static uint8_t     spiBPW   = 8 ;
-const static uint16_t    spiDelay = 0 ;
+static const uint8_t     spiBPW   = 8 ;
+static const uint16_t    spiDelay = 0 ;
 
 static uint32_t    spiSpeeds [2] ;
 static int         spiFds [2] ;
@@ -75,6 +75,11 @@ int wiringPiSPIDataRW (int channel, unsigned char *data, int len)
 
   channel &= 1 ;
 
+// Mentioned in spidev.h but not used in the original kernel documentation
+//	test program )-:
+
+  memset (&spi, 0, sizeof (spi)) ;
+
   spi.tx_buf        = (unsigned long)data ;
   spi.rx_buf        = (unsigned long)data ;
   spi.len           = len ;
@@ -87,16 +92,17 @@ int wiringPiSPIDataRW (int channel, unsigned char *data, int len)
 
 
 /*
- * wiringPiSPISetup:
- *	Open the SPI device, and set it up, etc.
+ * wiringPiSPISetupMode:
+ *	Open the SPI device, and set it up, with the mode, etc.
  *********************************************************************************
  */
 
-int wiringPiSPISetup (int channel, int speed)
+int wiringPiSPISetupMode (int channel, int speed, int mode)
 {
   int fd ;
 
-  channel &= 1 ;
+  mode    &= 3 ;	// Mode is 0, 1, 2 or 3
+  channel &= 1 ;	// Channel is 0 or 1
 
   if ((fd = open (channel == 0 ? spiDev0 : spiDev1, O_RDWR)) < 0)
     return wiringPiFailure (WPI_ALMOST, "Unable to open SPI device: %s\n", strerror (errno)) ;
@@ -105,12 +111,10 @@ int wiringPiSPISetup (int channel, int speed)
   spiFds    [channel] = fd ;
 
 // Set SPI parameters.
-//	Why are we reading it afterwriting it? I've no idea, but for now I'm blindly
-//	copying example code I've seen online...
 
-  if (ioctl (fd, SPI_IOC_WR_MODE, &spiMode)         < 0)
+  if (ioctl (fd, SPI_IOC_WR_MODE, &mode)            < 0)
     return wiringPiFailure (WPI_ALMOST, "SPI Mode Change failure: %s\n", strerror (errno)) ;
-  
+
   if (ioctl (fd, SPI_IOC_WR_BITS_PER_WORD, &spiBPW) < 0)
     return wiringPiFailure (WPI_ALMOST, "SPI BPW Change failure: %s\n", strerror (errno)) ;
 
@@ -119,3 +123,15 @@ int wiringPiSPISetup (int channel, int speed)
 
   return fd ;
 }
+
+
+/*
+ * wiringPiSPISetup:
+ *	Open the SPI device, and set it up, etc. in the default MODE 0
+ *********************************************************************************
+ */
+
+int wiringPiSPISetup (int channel, int speed)
+{
+  return wiringPiSPISetupMode (channel, speed, 0) ;
+}
diff --git a/wiringPi/wiringPiSPI.h b/wiringPi/wiringPiSPI.h
index f53697d..48cb7be 100644
--- a/wiringPi/wiringPiSPI.h
+++ b/wiringPi/wiringPiSPI.h
@@ -28,6 +28,7 @@ extern "C" {
 
 int wiringPiSPIGetFd  (int channel) ;
 int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ;
+int wiringPiSPISetupMode (int channel, int speed, int mode) ;
 int wiringPiSPISetup  (int channel, int speed) ;
 
 #ifdef __cplusplus

@nopnop2002
Copy link

nopnop2002 commented Apr 5, 2023

I am using OrangePi ZERO Rev1.5(H2+) and Armbian_21.08.1_Orangepizero_buster_current_5.10.60.img.

$ uname -a
Linux orangepizero 5.10.60-sunxi #21.08.1 SMP Wed Aug 25 18:19:32 UTC 2021 armv7l GNU/Linux

SPI device is present.

$ ls /dev/spi*
/dev/spidev1.0

$ dmesg | grep spi
[    4.646244] spidev spi1.0: probing from DT

I applied the patch suggested by pm-cz.
But SPI still doesn't work.

Does anyone have a fork that works with SPI in this environment?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants