2

I was happily controlling Shiftbrite LEDs using SPI and Python based on this code

Today I upgraded my Pi using

sudo apt-get update && sudo apt-get dist-upgrade
sudo rpi-update

Now my script no longer works. I get this error:

File "/home/pi/shiftbrite/go.py", line 81, in <module>
    fcntl.ioctl(spidev, 0x40046b04, array.array('L', [5000000]))
IOError: [Errno 25] Inappropriate ioctl for device

Might the value 0x40046b04 need to change since the upgrade? And I wonder if it was the upgrade to Raspbian or the Pi firmware that caused this.

Dave Tweed
  • 171
  • 4
  • 8
TrevorJ
  • 183
  • 1
  • 2
  • 7

2 Answers2

1

The value 0x40046b04 is the value of macro SPI_IOC_WR_MAX_SPEED_HZ and there have been no changes there.

Are you sure spidev is an open descriptor for a SPI device?


The following code works on my Pi2.

Raspbian 3.18.8-v7+ #765 SMP PREEMPT

#!/usr/bin/env python

import time
import math
import array
import fcntl

spidev = file("/dev/spidev0.0", "wb")

rgb=bytearray(3)

#set the spi frequency to 20 kbps
fcntl.ioctl(spidev, 0x40046b04, array.array('L', [20000]))

while True :

   for i in range(0, 48):
      #use your own colors here
      rgb[0] = 1
      rgb[1] = 1
      rgb[2] = 1
      spidev.write(rgb)

   spidev.flush()
   time.sleep(0.2)
joan
  • 71,852
  • 5
  • 76
  • 108
1

The solution was to re-enable SPI in raspi-config as described in I2C, SPI, I2S, LIRC, PPS, stopped working? Read this.

Funnily enough I was led to that post by this previous answer by Joan - thanks Joan!

TrevorJ
  • 183
  • 1
  • 2
  • 7