代码之家  ›  专栏  ›  技术社区  ›  Logan859

闪存和tft LCD共享SPI硬件的问题

  •  2
  • Logan859  · 技术社区  · 7 年前

    我使用的是TFT LCD屏幕(ILI9163c),它与带spi引脚的athros AR9331模块相连。Athros AR9331在OpenWRT linux发行版上运行。所以,我用我的C应用程序代码用spidev0.1驱动我的LCD。

    Athros AR9331板使用相同的SPI引脚驱动板上的闪存,这是从内核处理的。

    我有单独的LCD芯片选择引脚,通过使其从代码中高低来为LCD提供适当的数据识别,但有时当一些数据(使用其他脚本或应用程序)在flash上传输时,LCD屏幕仍然受到垃圾的影响,而LCD打印正在从我的代码中进行。

    我在LCD芯片上控制从代码中选择,但不用于闪存。所以在这种情况下,当flash和LCD的操作同时进行时,我应该做什么来处理这种情况呢。

    这是我使用SPIdev0.1在LCD上发送数据的功能代码。

        void spi_transactor(unsigned int wlength,
                            unsigned int rlength,
                            const unsigned char write_data,
                            int mode)
        {
           int ret;
           struct spi_ioc_transfer xfer[4];
           unsigned char init_reg[1];
    
           init_reg[0] = write_data;
    
           if (mode)
           {
              gpio_set_value(_rs, 1);  // DATA 
           }
           else
           {
              gpio_set_value(_rs, 0);  // COMMAND
           }
    
           memset(xfer, 0, sizeof xfer);
    
           xfer[0].bits_per_word = 8;
           xfer[0].tx_buf = (unsigned long) &init_reg[0];
           xfer[0].rx_buf = 0;                        //( unsigned long ) &buf_rx[0];
           xfer[0].len = wlength + rlength;
           xfer[0].delay_usecs = 0;
           xfer[0].speed_hz = speedx;               
           //xfer[0].speed_hz = 40000000;            // 40MHZ
    
     gpio_set_value(_CS, 0);          // SET ChipSELECT LOW    
           ret = ioctl(spi_fd, SPI_IOC_MESSAGE(1), &xfer);     
     gpio_set_value(_CS, 1);          // SET ChipSELECT HIGH 
    
           (void) ret;
           //DEBUG_PRINT("%d\n",ret);
           //if (ret <= 0) ; 
           //DEBUG_PRINT("ERROR: %s\n", strerror(errno));
    
        }
    

    我认为,如果我们可以在内核的spidev0.1驱动程序中将我的gpio配置为Chipselect,这是可能的。。。但如何在内核中将gpio配置为chipselect呢?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Logan859    7 年前

    我在这里找到了类似的东西。。。

    openWRT custom chipselect GPIO

    刚刚从spi驱动程序将通用GPIO引脚注册为LCD的CS1,最后我解决了我的问题。

    谢谢你@A.K,@user694733