1'''
2SPI - SPI_write.py with synchronous mode.
3
4This example demonstrates how to communicate with USBDAQF1TD (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.USBDAQF1TD()
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()