SPI write

  1'''
  2SPI - SPI_write.py with synchronous mode.
  3
  4This example demonstrates how to communicate with USBDAQF1D (master) and 25LC640 (slave) with SPI interface.
  5
  6First, it shows how to open SPI port & DIO pins and configure SPI parameters.
  7Second, write some bytes with address into EEPROM (25LC640).
  8Last, close SPI port & DIO pins.
  9
 10-------------------------------------------------------------------------------------
 11Please change correct serial number or IP and port number BEFORE you run example code.
 12
 13For other examples please check:
 14    https://github.com/WPC-Systems-Ltd/WPC_Python_driver_release/tree/main/examples
 15See README.md file to get detailed usage of this example.
 16
 17Copyright (c) 2022-2025 WPC Systems Ltd. All rights reserved.
 18'''
 19
 20## WPC
 21from wpcsys import pywpc
 22
 23## Python
 24import time
 25
 26
 27def main():
 28    ## Get Python driver version
 29    print(f'{pywpc.PKG_FULL_NAME} - Version {pywpc.__version__}')
 30
 31    ## Create device handle
 32    dev = pywpc.USBDAQF1D()
 33
 34    ## Connect to device
 35    try:
 36        dev.connect("default")  ## Depend on your device
 37    except Exception as err:
 38        pywpc.printGenericError(err)
 39        ## Release device handle
 40        dev.close()
 41        return
 42
 43    try:
 44        ## Parameters setting
 45        port = 2  ## Depend on your device
 46        datasize = 0  ## Mode: 0 = 8-bit data, 1 = 16-bit data.
 47        first_bit = 0  ## Mode: 0 = MSB first, 1 = LSB first.
 48        prescaler = 64
 49        mode = 0  ## 0 : CPOL = 0 CPHA = 0, 1 : CPOL = 0 CPHA = 1, 2 : CPOL = 1 CPHA = 0, 3 : CPOL = 1 CPHA = 1
 50
 51        if port == 1:
 52            DO_port = 2
 53            DO_index = [0]  ## CS pin
 54
 55        elif port == 2:
 56            DO_port = 3
 57            DO_index = [2]  ## CS pin
 58
 59        timeout = 3  ## [sec]
 60
 61        WRITE = 0x02
 62        WREN = 0x06
 63
 64        '''
 65        Take 25LC640 for example
 66        '''
 67
 68        ## Get firmware model & version
 69        driver_info = dev.Sys_getDriverInfo(timeout)
 70        print(f"Model name: {driver_info[0]}, Firmware version: {driver_info[-1]} ")
 71
 72        '''
 73        Open DO pins & SPI port & set CS(pin0) to high
 74        '''
 75
 76        ## Open pin0 with digital output
 77        err = dev.DO_openPins(DO_port, DO_index, timeout)
 78        print(f"DO_openPins in port {DO_port}, status: {err}")
 79
 80        ## Open SPI
 81        err = dev.SPI_open(port, timeout)
 82        print(f"SPI_open in port {port}, status: {err}")
 83
 84        ## Set CS(pin0) to high
 85        err = dev.DO_writePins(DO_port, DO_index, [1], timeout)
 86        print(f"DO_writePins in port {DO_port}, status: {err}")
 87
 88        '''
 89        Set SPI parameter
 90        '''
 91
 92        ## Set SPI port and set datasize to 8-bits data
 93        err = dev.SPI_setDataSize(port, datasize, timeout)
 94        print(f"SPI_setDataSize in port {port}, status: {err}")
 95
 96        ## Set SPI port and set first_bit to MSB first
 97        err = dev.SPI_setFirstBit(port, first_bit, timeout)
 98        print(f"SPI_setFirstBit in port {port}, status: {err}")
 99
100        ## Set SPI port and set prescaler to 64
101        err = dev.SPI_setPrescaler(port, prescaler, timeout)
102        print(f"SPI_setPrescaler in port {port}, status: {err}")
103
104        ## Set SPI port and set CPOL and CPHA to 0 (mode 0)
105        err = dev.SPI_setMode(port, mode, timeout)
106        print(f"SPI_setMode in port {port}, status: {err}")
107
108        '''
109        Write data via SPI
110        '''
111
112        ## Set CS(pin0) to low
113        err = dev.DO_writePins(DO_port, DO_index, [0], timeout)
114        print(f"DO_writePins in port {DO_port}, status: {err}")
115        time.sleep(0.01)  ## delay [sec]
116
117        ## Write WREN byte
118        err = dev.SPI_write(port, [WREN], timeout)
119        print(f"SPI_write in port {port}, status: {err}")
120        time.sleep(0.01)  ## delay [sec]
121
122        ## Set CS(pin0) to high
123        err = dev.DO_writePins(DO_port, DO_index, [1], timeout)
124        print(f"DO_writePins in port {DO_port}, status: {err}")
125        time.sleep(0.05)  ## delay [sec]
126
127        '''
128        Write data via SPI
129        '''
130
131        ## Set CS(pin0) to low
132        err = dev.DO_writePins(DO_port, DO_index, [0], timeout)
133        print(f"DO_writePins in port {DO_port}, status: {err}")
134        time.sleep(0.01)  ## delay [sec]
135
136        ## Write data byte 0x55 in to address 0x0002
137        err = dev.SPI_write(port, [WRITE, 0x00, 0x02, 0x55], timeout)
138        print(f"SPI_write in port {port}, status: {err}")
139        time.sleep(0.01)  ## delay [sec]
140
141        ## Set CS(pin0) to high
142        err = dev.DO_writePins(DO_port, DO_index, [1], timeout)
143        print(f"DO_writePins in port {DO_port}, status: {err}")
144
145        '''
146        Close DO pins and SPI port
147        '''
148
149        ## Close SPI
150        err = dev.SPI_close(port)
151        print(f"SPI_close in port {port}, status: {err}")
152
153        ## Close pin0 with digital output
154        err = dev.DO_closePins(DO_port, DO_index)
155        print(f"DO_closePins in port {DO_port}, status: {err}")
156    except Exception as err:
157        pywpc.printGenericError(err)
158
159    finally:
160        ## Disconnect device
161        dev.disconnect()
162
163        ## Release device handle
164        dev.close()
165
166
167if __name__ == '__main__':
168    main()