未经作者许可禁止转载
本文地址:https://jxcn.org/2023/05/rgb565-rgb666/

最近买了好几个xu大开源的桌面信息牌,但是固件没有开源。

我按照样例测试一下这块屏幕在RGB565和RGB666的表现

驱动屏幕的部分和下面的差不多

样例

#include <lvgl.h>
#include <TFT_eSPI.h>
#define screenWidth 320
#define screenHeight 480

TFT_eSPI tft = TFT_eSPI(); /* TFT instance */
static lv_disp_draw_buf_t draw_buf; 

int ledPin = 22; /* 背光PWM */
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 10;

void my_disp_flush( lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p )
{
    uint32_t w = ( area->x2 - area->x1 + 1 );
    uint32_t h = ( area->y2 - area->y1 + 1 );
    int i = 0;

    tft.startWrite();
    tft.setAddrWindow( area->x1, area->y1, w, h );
#if LV_COLOR_DEPTH == 32
    while(i < w* h) {
      int p = *((( uint32_t * )&color_p->full) + i);
      tft_Write_8(p >> 16 & 0xff);
      tft_Write_8(p >> 8 & 0xff);
      tft_Write_8(p & 0xff);
      i++;
    }
#else
    tft.pushColors( ( uint16_t * )&color_p->full, w * h, true );
#endif
    tft.endWrite();
    lv_disp_flush_ready( disp );
}
...
setup()
{
...
  // 背光
  ledcSetup(ledChannel, freq, resolution);
  ledcAttachPin(ledPin, ledChannel);
  ledcWrite(ledChannel, 1023);

  // tft
  tft.begin();
  tft.writecommand(TFT_INVON);
  tft.setRotation(0);
  
  //lvgl
  lv_init();
  /* 放进bss会溢出 */
  void *buf1 = malloc(screenWidth * screenHeight/10 * sizeof(lv_color_t));
  lv_disp_draw_buf_init( &draw_buf, buf1, NULL, screenWidth * screenHeight/10);
  /*Initialize the display*/
  static lv_disp_drv_t disp_drv;
  lv_disp_drv_init( &disp_drv );
  /*Change the following line to your display resolution*/
  disp_drv.hor_res = screenWidth;
  disp_drv.ver_res = screenHeight;
  disp_drv.flush_cb = my_disp_flush;
  disp_drv.draw_buf = &draw_buf;
  lv_disp_drv_register( &disp_drv );
...
}

loop()
{
...
  ledcWrite(ledChannel, bright); // 调整背光
  lv_timer_handler(); 
  delay(5);
}

帧率

RGB565模式下,一个像素传输2个字节,RGB666,则传输3个字节,但是每个字节只用到6bit。

datasheet里面写WRX的最小周期是40ns,那传输的速率就是25MB/s

按照RGB565算,那理论最大的帧率(全屏刷新)就可以达到

25000000/ (320×480×2) = 81.3fps

如果使用RGB666,则可以达到

25000000/ (320×480×3) = 54.2fps

不和触摸屏一起使用的话,感觉fps低一点也没关系

颜色对比

看起来颜色RGB666比RGB565好很多(偏色和颜色过度都更好一些),然而仅仅只是多了2个bit而已,不过这次测试中图片在squareline studio里就已经被转换成对应的pixel format,可能对结果也是有影响的。

对比

这个是原图=>

原图