Я программирую свой A13-OLinuXino-MICRO, используя предоставленный SPI-драйвер pyA13 0.2.2 для отправки данных на ЖК-дисплей. В идеале я хотел бы отправить список, содержащий 320*240*2 (320*240 пикселей, 16 бит на цвет) байтов, которые будут записаны в одной команде непрерывной записи, чтобы обеспечить эффективность скорости. Драйверы в spi.c и spi_lib.c имели 8-битный tx_len, который ограничивал меня 256 байтами, поэтому я изменил их на 32-битные, и это сработало, но теперь я получаю ошибку, когда пытаюсь передать список длиной более 4096 значений в мою функцию spi.write(data[:]). Ниже приведен код, который я использую для заполнения экрана сплошным 16-битным цветом:
Код: Выделить всё
def FillScreen(c):
LCD_SetPos(0, 0, 239, 319)
ch = c>>8 & 0x00FF
cl = c & 0x00FF
d =[]
for x in range (0,76800):
d += [ch, cl]
spi.write(d[:])
Вот ошибка, которую я получаю при запуске функции:
Код: Выделить всё
Traceback (most recent call last):
File "lcd.py", line 205, in
FillScreen(0x00FF)
File "lcd.py", line 200, in FillScreen
spi.write(d[:])
IOError: [Errno 90] Message too long
Фрагмент кода, который выдает эту ошибку, содержится в spi.c
Код: Выделить всё
/* Send data */
if(spi_write(fd, tx_buffer, tx_len) < 0){
return PyErr_SetFromErrno(PyExc_IOError);
}
Есть ли способ передать более длинное сообщение функции spi.write? Я очень новичок в Python, но вполне комфортно работаю с C, будьте осторожны с моим кодом, пожалуйста... Кроме того, я пробовал зацикливать меньшие сообщения, чтобы заполнить экран, но это занимает слишком много времени. Будем признательны за любую помощь.
Спасибо,
Майкл
Подробнее здесь:
https://stackoverflow.com/questions/337 ... i-function