摘要:在以SD卡为图像存储器件的图像协处理器中,基带芯片和SD卡控制器在速度上的差异经常会导致数据传输错误。为解决此问题,设计了一种可适应多种时序情况的DMA控制器。该DMA控制器的状态机,一方面对基带芯片和SD卡控制器的操作请求进行仲裁,在响应基带芯片请求的同时,适当推迟SD卡控制器的请求;另一方面对DMA读写的数据进行计数,并以此判断SD卡的一次多块读或多块写操作是否完成;最后对基带芯片和SD卡控制器的速度做出判断,必要时暂停速度较快一方的操作。实际工作表明,该DMA控制器能够在基带芯片和SD卡控制器之间
正确传输数据并使读写SD卡的速度达到210 kB/s。
关键词:移动终端;基带芯片;图像处理;SD卡;DMA控制器
目前,以手机为代表的移动终端设备已经成为集图像、游戏、商务等多种功能于一体的工作和娱乐平台。此平台为了给用户提供丰富和高质量的视觉享受,大都设置图像协处理器,由其来完成数字图像的采集、处理、压缩、存储等功能。然而,高速度和高分辨率已经成为数字图像的方向发展,它们对图像协处理器的设计提出了更高的要求。
为了使图像协处理器能够更快地存储更多的数字图像,这里介绍一种以SD卡为图像存储器件的图像协处理器。采用SD卡存储图像数据有两方面的原因:1)SD卡体积小、功耗低,非常符合移动终端设备的系统要求;2)SD卡的存储容量非常大,目前最高可达到32GB,另外其最高时钟频率为25MHz,读写的极限速度可以达到12.5MB/s。所以SD卡对于分辨率越来越高、速度越来越快的数字图像,无疑是理想的存储器件。
但SD卡控制器对DMA接口的灵活性有较高要求。这首先有协议方面的原因,SD卡控制器每次读或写卡的数据量应为512字节的整数倍但在图像协处理器中提供数据的基带芯片写入数据时可能被某个中断源打断,故不能保证每次都连续写入512字节整数倍个数据,所以DMA接口的控制器在此情况下必须能够使SD卡控制器在写完已有数据后暂停写卡操作;其次有速度方面的原因,基带芯片写数据的速度与SD卡控制器写SD卡的速度有很大差异,当基带芯片要写入新的数据时,极有可能SD卡控制器还在通过DMA接口读取数据,所以DMA控制器此时必须能够使基带芯片的写入和SD卡控制器的读出互不干扰。
本文所设计的可适应于多种时序情况的DMA控制器,被应用于该图像协处理器之中后,能够很好地解决上述问题。
1 图像协处理器的系统结构
图1所示为该DMA控制器所处图像协处理器的系统结构,下面将对其的系统构成和数据流程做详细说明。
1.1 系统构成
基带芯片为移动终端设备的系统控制核心。其通过外部存储器接口总线(External eMI,Memory Interface bus)与该图像协处理器的控制端口相连。基带芯片不仅控制着图像协处理器所有模块的工作模式,而且负责图像数据的传送。EMI总线数据线宽度为16位,其控制的图像显示终端为分辨率为320x240的LCD。
图像传感器(sensor)为感光器件,其将接收到的光信号转为电信号,并在内部通过模拟/数字转换产生数字图像,在该图像协处理器设计中采用分辨率为640x480的图像传感器,其的工作时钟为24 MHz。
图像处理模块,即ISP(Image Signal Processing)模块被用于图像处理,包括去坏点、去噪声、边界增强等功能。
图像压缩模块被用于对图像处理模块输出的YUV422格式数据进行JPEG压缩。
SD卡控制器模块负责与SD卡的命令和数据交互,所有对SD卡的操作都由基带芯片配置SD卡控制器的相关寄存器完成。其与SD卡的接口包括CLK(SD卡的时钟信号线)、CMD(SD卡的命令线)、DATA0~DATA3(SD卡的4根数据线)。在与SD卡的数据交互中,一般是以block(512字节)为
单位的,并且在启动写卡命令之后,SD卡控制器必须在250 ms(SD version 2.0)内将所有数据写入SD卡中。
DMA控制器为基带芯片与SD卡控制器的接口模块,用于对写卡数据和读卡数据做暂时存储。其的本质功能是协调基带芯片和SD卡控制器之间的速度差异。存储数据的DMA存储器容量为5 120字节,即10个block数据。
1.2 数据流程
在该图像协处理器中,所有模块时钟频率均为48 MHz,其被2分频之后送至图像传感器,图像传感器以24 MHz频率送出格式为YUV422的640x480图像。
该图像协处理器有2种模式:图像预览模式和连拍模式。图像预览模式用于拍照前的图像预览,拍照者可以在LCD上看到将被拍下的图像。连拍模式用于连续拍摄图像,并将每一幅拍下的照片存入SD卡当中。
1.2.1 图像预览模式的数据流程
在图像预览模式下,图像传感器以24 MHz频率送出分辨率为640x480且格式为YUV422的图像,帧率为30帧/s。数据被48 MHz系统时钟同步后送入图像处理模块。图像处理模块将针对图像传感器的特点对图像进行处理以提高图像质量,然后将图像分辨率从640x480缩小至320x240以适应LCD的显示分辨率,并将数据格式从YUV422转为RGB565。最后,基带芯片通过EMI接口将图像数据读出,直接写入LCD的显示缓冲区后在LCD上显示出来。
1.2.2 连拍模式的数据流程
当基带芯片启动连拍模式后,其首先配置图像传感器,使其以10帧/s的帧率送出分辨率为640x480的数字图像,数据格式仍然为YUV42 2。此时每帧的周期为100 ms,其中帧有效时间为30 ms,帧消隐时间为70 ms。
当数据送入图像处理模块后,该模块仍对图像进行处理并将图像分辨率从640x480缩小至320x240,之后将数据格式从YUV422转为RGB56 5。基带芯片也仍然通过EMI接口将该图像数据读出,并直接写入LCD的显示缓冲区中,这样在连拍的时候,仍可以在LCD上看到被拍下的图像。
图像处理模块在送出预览数据的同时也将320x240的YUV422数据送至图像压缩模块。为了兼顾压缩比和图像质量,一般配置压缩比在10:1左右,这样一幅320x240的图像经JPEG压缩后的数据量为320x240x2/10=15 360字节。为留出适当的备用空间,图像压缩模块将编码之后的数据存入一个容量为8 192x16位的存储器中,在此命名为JPEG_MEM。当一幅图像编码完成时,即在图像传感器进入帧消隐阶段之后,JPEG_MEM中已经存了一幅压缩之后的图像。随后图像压缩模块向基带芯片发出中断信号,基带芯片在从图像处理模块接收了当前预览图像的最后一部分数据并送LCD显示后,将响应该中断,从JPEG_MEM中读出JPEG格式图片,存入片外的存储器中。经实际测试可知,基带芯片做一次EMI读取大约需要时间250 ns,因为EMI数据线宽度为16位,所以在此250 ns内基带芯片将从JPEG_MEM中读出2个字节,这样读完所有15 360个字节需要15 360x250/2=1.92 ms。在基带芯片读取JPEG数据之前,其将最后一部分预览数据读出并送LCD显示也需要1 ms左右,至此每帧图像70 ms的帧消隐时间在基带芯片读完JPEG数据后还剩余70-1-1.92=67.08 ms。
当基带芯片读完JPEG数据后,将立即准备将数据写入SD卡中。其首先将操作文件链表,在SD卡上为即将写入的JPEG图片分配相应空间,并将这些空间的原内容擦除。因为在写卡和擦卡之后,SD卡需要过一定时间后才能接受新的命令,所以操作文件链表和擦卡比较耗时间,一般需要15 ms左右。在此之后,为了提高写卡速度,基带芯片先将一部分数据(如512字节)利用DMA控制器写入存储器中,这需要的时间为250 nsx512/2=0.064 ms,然后配置SD卡控制器向SD卡发出CMD25(multiply block write conlluand)命令。基带芯片设置每个CMD25向卡写入10个block数据。在接收到SD卡发回的响应后,SD卡控制器将利用DMA接口从DMA存储器中读出图像数据并同时将数据写入SD卡中。在SD卡控制器写卡的同时,基带芯片将剩余的9个block数据写入DMA存储器。SD卡的时钟频率为24 MHz,为其工作在4根数据线模式时,其传送完所有5 120字节的数据只需要42nsx2x5120=0.43 ms。但是基带芯片写完剩余的9个block需要250nsx512x9/2=0.576 ms>0.43 ms,所以从基带芯片写第1个block开始到SD卡控制器把最后一个block写入SD卡大约需要时间为0.064+0.576+0.045=0.685 ms。在此之后,SD卡将进入编程状态(programming状态),这段时间因卡而异,在实际调试中使用的卡一般编程状态会持续5 ms左右。至此基带芯片完成一次5 120字节的写卡需要时间为:15+0.685+5=20.685ms。如前所述每幅JPEG压缩后的320x240的图片大约为15360字节,即30个block,所以写完一幅图片需要的总时间约为3x20.685=62.055ms,其小于前面计算的67.08ms,所以基带芯片和SD卡控制器可以在每帧图像的帧消隐时间内完成写卡操作。