2015-11-18 29 views
1

我使用提供的pyA13 0.2.2 SPI驅動程序將數據發送到LCD來編程我的 A13-OLinuXino-MICRO。理想情況下,我想發送一個包含320 * 240 * 2(320 * 240像素,每種顏色16位)字節的列表,以寫入一個連續寫入命令以提高速度。 spi.c和spi_lib.c中的驅動程序有一個8位tx_len,將我限制爲256字節,所以我將它們修改爲32位,但是現在當我嘗試傳遞超過4096個值的列表時收到錯誤spi.write(data [:])函數。下面是我使用,以填補了堅實的顏色,是16位的屏幕代碼:Python IOError:[Errno 90]消息太長,將長列表傳遞給SPI函數

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 

的一塊這是給我這個錯誤代碼包含在spi.c

/* Send data */ 
    if(spi_write(fd, tx_buffer, tx_len) < 0){ 
     return PyErr_SetFromErrno(PyExc_IOError); 
    } 

有沒有我可以通過一個較長的消息給spi.write功能什麼辦法?我對python非常陌生,但對C很滿意,請在我的代碼上輕鬆一下......另外,我嘗試了循環較小的消息來填充屏幕,但這需要很長時間。任何幫助,將不勝感激。

感謝, 邁克爾

回答

0

看在Linux的spidev文檔註釋 - https://www.kernel.org/doc/Documentation/spi/spidev

- There's a limit on the number of bytes each I/O request can transfer 
    to the SPI device. It defaults to one page, but that can be changed 
    using a module parameter. 

(你可以找到你的頁面尺寸$ getconf PAGESIZE - 我相信這是幾乎總是4096個字節)

我還沒有測試過,但我認爲Maxim的答案在這裏應該適合你:https://stackoverflow.com/a/16440226/5527382,即:

The solution is to add following lines to /etc/modprobe.d/local.conf:

options spidev bufsiz=<NEEDED BUFFER SIZE>

的spidev驅動程序默認爲4096個字節,那麼與該參數的值重寫它,如果它提供 - https://github.com/beagleboard/linux/blob/4.1/drivers/spi/spidev.c#L92-L94

static unsigned bufsiz = 4096; 
module_param(bufsiz, uint, S_IRUGO); 
MODULE_PARM_DESC(bufsiz, "data bytes in biggest supported SPI message"); 

把該行進入/etc/modprobe.d/local.conf會傳遞參數給spidev模塊時,它的加載 - 您需要在更改後重新啓動以確保重新加載它。

+0

您還可以通過'cat/sys/module/spidev/parameters/bufsiz'找出當前的最大傳輸大小。 –

+0

嗨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文件,但是什麼也沒做。 再次感謝 –

+0

我發現了一個解決方案,現在似乎適用於我,因爲我無法弄清楚如何添加Alex Haim描述的'options'方法。相反,我寫道,編輯/ SYS /模塊/ spidev /參數/ BUFSIZ文件bash腳本 '#!/斌/慶典 #靈寶BUFSIZ腳本 CD/SYS /模塊/ spidev /參數 搭配chmod 666 BUFSIZ 回聲65534> bufsiz' –

0

我發現了一個解決方案,現在似乎適用於我,因爲我無法弄清楚如何添加Alex Haim描述的'options'方法。相反,我寫道,編輯/ SYS /模塊/ spidev /參數/ BUFSIZ文件

#!/bin/bash 
# Spi Bufsiz Script 

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

這種溶液發現here bash腳本。