Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python IOError:[Errno 90]消息太长,将长列表传递给SPI函数_Python_C_Spi_Ioerror - Fatal编程技术网

Python IOError:[Errno 90]消息太长,将长列表传递给SPI函数

Python IOError:[Errno 90]消息太长,将长列表传递给SPI函数,python,c,spi,ioerror,Python,C,Spi,Ioerror,我正在使用提供的SPI驱动程序编程,以便将数据发送到LCD。理想情况下,我希望发送一个包含320*240*2(320*240像素每种颜色16位)字节的列表,以便在一个连续写入命令中写入,从而提高速度效率。spi.c和spi_lib.c中的驱动程序有一个8位的tx_len,它将我限制为256字节,所以我将它们修改为32位,这很有效,但现在当我尝试在spi.write(data[:])函数中传递长度超过4096个值的列表时,我收到一个错误。下面是我用来用16位纯色填充屏幕的代码: def FillS

我正在使用提供的SPI驱动程序编程,以便将数据发送到LCD。理想情况下,我希望发送一个包含320*240*2(320*240像素每种颜色16位)字节的列表,以便在一个连续写入命令中写入,从而提高速度效率。spi.c和spi_lib.c中的驱动程序有一个8位的tx_len,它将我限制为256字节,所以我将它们修改为32位,这很有效,但现在当我尝试在spi.write(data[:])函数中传递长度超过4096个值的列表时,我收到一个错误。下面是我用来用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 <module>
    FillScreen(0x00FF)
  File "lcd.py", line 200, in FillScreen
    spi.write(d[:])
IOError: [Errno 90] Message too long
回溯(最近一次呼叫最后一次):
文件“lcd.py”,第205行,在
填充屏幕(0x00FF)
文件“lcd.py”,第200行,在FillScreen中
spi.write(d[:])
IOError:[Errno 90]消息太长
给出这个错误的代码片段包含在spi.c中

/* Send data */
    if(spi_write(fd, tx_buffer, tx_len) < 0){
        return PyErr_SetFromErrno(PyExc_IOError);
    }
/*发送数据*/
如果(spi写入(fd、tx缓冲区、tx透镜)<0){
返回PyErr_setfromrno(PyExc_IOError);
}
是否有任何方法可以将较长的消息传递给spi.write函数?我对python非常陌生,但对C非常熟悉,请轻松使用我的代码。。。此外,我还尝试循环发送较小的消息以填充屏幕,但这需要花费太长时间。任何帮助都将不胜感激

谢谢,
Michael查看Linux spidev文档中的注释-:

(您可以通过
$getconf PAGESIZE
找到您的页面大小-我相信它几乎总是4096字节。)

我还没有测试过,但我认为Maxim的答案应该适合您:,即:

解决方案是在/etc/modprobe.d/local.conf中添加以下行:

options-spidev-bufsiz=

spidev驱动程序默认为4096字节,如果提供了,则使用该参数的值覆盖它-:


将该行放入
/etc/modprobe.d/local.conf
应该在加载spidev模块时将该参数传递给spidev模块-您需要在进行更改后重新启动,以确保已重新加载该模块。

查看Linux spidev文档中的注释-:

(您可以通过
$getconf PAGESIZE
找到您的页面大小-我相信它几乎总是4096字节。)

我还没有测试过,但我认为Maxim的答案应该适合您:,即:

解决方案是在/etc/modprobe.d/local.conf中添加以下行:

options-spidev-bufsiz=

spidev驱动程序默认为4096字节,如果提供了,则使用该参数的值覆盖它-:


将该行放入
/etc/modprobe.d/local.conf
应该在加载时将该参数传递给spidev模块-在进行更改后,您需要重新启动以确保已重新加载该模块。

我找到了一个似乎适合我的解决方案,因为我不知道如何添加Alex描述的“选项”方法哈伊姆。相反,我编写了一个bash脚本来编辑/sys/module/spidev/parameters/bufsiz文件

#!/bin/bash
# Spi Bufsiz Script

cd /sys/module/spidev/parameters
chmod 666 bufsiz
echo 65534 > bufsiz

找到了此解决方案。

我找到了一个似乎适合我的解决方案,因为我不知道如何添加Alex Haim描述的“选项”方法。相反,我编写了一个bash脚本来编辑/sys/module/spidev/parameters/bufsiz文件

#!/bin/bash
# Spi Bufsiz Script

cd /sys/module/spidev/parameters
chmod 666 bufsiz
echo 65534 > bufsiz

已找到此解决方案。

您还可以使用
cat/sys/module/spidev/parameters/bufsiz
查找当前最大传输大小。您好,Alex,非常感谢您提供此有用信息!!但是,我没有名为/etc/modprobe.d/local.conf的文件=(我的modprobe.d文件夹包含:fbdev-blacklist.conf alsa-base-blacklist.conf alsa-base.conf 8192cu.conf 8188eu.conf cat/sys/module/spidev/parameters/bufsiz确实返回4092…您建议我如何添加该选项?我尝试使用您建议的选项创建一个local.conf文件,但没有任何效果。感谢AgainI找到了一个这个解决方案现在似乎对我有效,因为我不知道如何添加Alex Haim描述的“选项”方法。相反,我编写了一个bash脚本,编辑/sys/module/spidev/parameters/bufsiz文件
!/bin/bash#Spi-bufsiz脚本cd/sys/module/spidev/parameters chmod 666 bufsiz echo 65534>bufsiz
,您还可以找到您的t当前最大传输大小与
cat/sys/module/spidev/parameters/bufsiz
Hi-Alex,非常感谢您提供的有用信息!!但是我没有名为/etc/modprobe.d/local.conf的文件=(我的modprobe.d文件夹包含:fbdev-blacklist.conf alsa-base-blacklist.conf alsa-base.conf 8192cu.conf 8188eu.conf cat/sys/module/spidev/parameters/bufsiz确实返回4092…您建议我如何添加该选项?我尝试使用您建议的选项创建一个local.conf文件,但没有任何效果。感谢AgainI找到了一个这个解决方案现在似乎对我有效,因为我不知道如何添加Alex Haim描述的“选项”方法。相反,我编写了一个bash脚本,编辑/sys/module/spidev/parameters/bufsiz文件
!/bin/bash#Spi-bufsiz脚本cd/sys/module/spidev/parameters chmod 666 bufsiz echo 65534>bufsiz
#!/bin/bash
# Spi Bufsiz Script

cd /sys/module/spidev/parameters
chmod 666 bufsiz
echo 65534 > bufsiz