IDU

示例列表

本章介绍 IDU 示例的详细信息。RTL87x2G系列芯片为IDU外设提供以下示例。

功能概述

IDU定义了一种压缩文件格式,包括压缩算法、压缩参数、原始像素信息、压缩像素地址和压缩像素数据。原始图像数据必须使用支持的算法进行压缩,以生成符合指定文件格式的压缩文件。

需要在嵌入式系统启动运行之前,将这些压缩文件在存储设备(如NAND闪存或NOR闪存)中存储。使用压缩图片主要优势是一般情况下压缩文件的大小明显小于原始图像,从而节省存储空间,降低成本。

数据传输需要2个DMA通道:其中一个通道用于向IDU的RX FIFO发送数据,另一个用于从IDU的TX FIFO读取数据到存储空间。由于非压缩的图片一般比压缩后的图片占用空间小,所需读取的数据量更大,因此有时压缩后的图片不但数据量更少,而且读取更快。

特性列表

  • 支持经过RLE压缩的数据。

  • 支持经过FastLZ压缩的数据。

  • 支持解码经过YUV采样并且进行过数据模糊的数据。

  • 支持局部解压。

  • 支持中断和轮询的方式。

  • FIFO 深度: 16.

  • FIFO 宽度: 32 bits.

系统框图

IDU的系统框图如下图所示:

../../../../../_images/IDU_Block_Diagram.JPG

IDU系统框图

压缩算法

IDU支持3种不同的压缩算法:RLE、FastLZ和YUV。对于同一图像,每种算法可能有不同的压缩比,这要求用户检查每种压缩算法的不同配置,以找到最适合每个图像的压缩算法。

RLE

RLE(游程编码)是一种无损压缩算法,其中连续相同的数据被存储为单个数据值和数据数量。它可以极大地减小文件大小,特别是对于简单的图形图像,如图标、线条图和动画。对于没有许多连续相同数据的文件,RLE可能会增加文件大小。

FastLZ

FastLZ是Lempel-Ziv 77算法(LZ77)的ANSI C/C90实现,用于无损数据压缩。每个图像行的原始像素数据被压缩成称为指令的块。IDU支持三种指令:literal run,short match和long match。FastLZ可以极大地减小文件大小,特别是对于简单的图形图像,如图标、线条图和动画。对于没有许多连续相同字节的文件,FastLZ可能会增加文件大小。

YUV

YUV是PAL模拟彩色电视标准(不包括PAL-N)中使用的色彩模型。一种颜色由Y分量(亮度)和两个色度分量U和V描述。如今,YUV术语在计算机行业中常用于描述使用YCbCr编码的色彩空间。 YUV采样是一种有损压缩算法,包含三个步骤。首先,RGB色彩格式转换为YUV色彩格式。然后,YUV色彩格式中的每个分量被采样并重新组合。最后,每个字节的最低有效位可以被丢弃,剩余的位被重新组合。 此外,可以对YUV采样数据执行FastLZ压缩,以进一步减小数据大小。采样过程如下图所示:

../../../../../_images/YUV_Sample_Compress_Decompress_Procedure.JPG

YUV采样压缩和解压缩过程

中断

IDU有两种不同的中断支持固件处理流程,分别是解压完成中断和解压错误中断。

解压完成中断

当IDU的整个解压过程完成且所有像素数据已传输到目标位置时,会触发IDU解压完成中断。此中断始终表示解压过程的结束。

解压错误中断

当解压过程中发生错误时,会触发IDU解压错误中断。当一行图像数据解压后保存到TX FIFO的数据比预期更少或更多时,会触发错误中断。如果整个帧解压过程后IDU的内部缓冲区、RX FIFO或TX FIFO不为空,也会报告错误。

解压缩

API IDU_Decode() 通过输入压缩数据的地址和感兴趣的范围来实现数据解压缩功能。解压结果也将通过函数的返回值进行报告。

故障排除

解压错误处理

当IDU在解压过程中检测到错误时,它将停止工作并将自身重置为非工作状态。同时,负责传输数据的DMA通道将被暂停,剩余操作将被中止。 如 IDU解压错误中断 中所述,当一行解压过程后保存到TX FIFO的数据比预期少或多时,通常会发生内存空间中的越界错误。因此即使解压过程已被中止,比预期更多的数据可能已被传输到内存并导致损坏,从而导致系统故障和挂起。因此,确保原始压缩数据正确非常重要。