SPI : changing CS pin



  • Has anyone succeeded in changing the pins used for SPI from the default (MISO = 9; MOSI = 8; CLK = 7; CS1 = 6). I'm mainly interested in changing the CS1 pin setting. I have multiple SPI devices and I want to disable/enable to select one at a time.

    The SPI devices I am using are active-low enable. I am using an Omega 2+.

    Here's the setup code I'm using (python):

    # GPIO.output(pinNumber=6, setting=GPIO.HIGH)
    # GPIO.output(pinNumber=18, setting=GPIO.LOW)
    
    ...
    LSBFIRST = 1
    
    busNumber = 1
    deviceId = 32766
    ...
    self.device = onionSpi.OnionSpi(busNumber, deviceId)
    ...
    spi.sck =  7
    spi.mosi = 8
    spi.miso = 9
    spi.cs = 18
    # spi.noCs = 1
    # spi.csHigh = self.csHigh
    self.set_bit_order(LSBFIRST)
    
    # check the device
    if spi.checkDevice() is 0:
                mapped = "the device adapter is already mapped."
    else:
                mapped = "the device adapter is NOT mapped."
    print("Registered: {}".format(mapped))
    
    # register the device
    if spi.registerDevice() is 0:
                success = "Device with the specified bus number and device ID is already registered OR successfully registered SPI device adapter."
    else:
                success = "Unable to register device."
    print("Registering.. : {}".format(success))
    
    # initialize the device parameters
    if spi.setupDevice() is 0:
                success = "Setup successful."
    else:
                success = "Setup failed."
    
    print("Setting up spi device: {}".format(success))
    
    # check the device again
    if spi.checkDevice() is 0:
                mapped = "the device adapter is already mapped."
    else:
                mapped = "the device adapter is NOT mapped."
    print("Registered: {}".format(mapped))
    
    ### Here I print out all the parameters of the OnionSpi object 
    

    What I am seeing:

    • pin6 is always high (though the SPI device is read fine using the above setup code).
    • when manually changing GPIO value using something like the commented code at top : GPIO 18 switches low-to-high or high-to-low correctly, but when setting pin 18 as CS pin, nothing happens (no value change, ever). [the manual change of pin18 in conjunction with the noCS option commented out in above code]
    • Setting the csHigh value to one (in commented code) doesn't seem to have any effect whether cs pin is set to 6 or 18
    • I have confirmed that the SPI variables regurgitated after registration match the changes (pin 18 set to cs). See below.
    Registered: the device adapter is already mapped.
    > SPI device already available
    Registering.. : Device with the specified bus number and device ID is already registered OR successfully                         registered SPI device adapter.
    > Initializing SPI parameters...
      > Set SPI mode:       0x508
      > Set bits per word:  0
      > Set max speed:      100000 Hz (100 KHz)
    Setting up spi device: Setup successful.
    Registered: the device adapter is already mapped.
    ----------------
    SPI Device Settings:
      bus:    1
      device: 32766
      speed:    100000 Hz (100 kHz)
      delay:    0 us
      bpw:      8
      mode:     0 (0x08)
         3wire:    0
         lsb:      1
         loop:     0
         no-cs:    0
         cs-high:  0
    
    GPIO Settings:
      sck:      7
      mosi:     8
      miso:     9
      cs:       18 
    
    ----------------
    

    Any hints on how to debug this would be greatly appreciated. Thanks!

    Related links:
    Communicating with SPI devices
    SPI Python module



Looks like your connection to Onion Community was lost, please wait while we try to reconnect.