具体实施方式
一个典型的12英寸打印头的宽度由一个或多个打印引擎/控制器(PEC)控制,如下所述,实现在A4和信纸页面上的全页宽打印。在现有打印环境中,最多使用6个彩色墨水通道,它们是:· CMY,用于规则的彩色打印· K,用于打印黑色文本和黑色内容· IR(红外),用于支持标记的应用· F(定色剂),用于高速打印
由于打印机支持高速打印,所以在高速打印时,应使用定色剂以保证在打印下一个页面之前当前页面的墨水已经干透,否则可能发生蹭墨现象。在低速打印环境中,不需要使用定色剂。
可以在单个芯片中建立一个PEC,使其与打印头接口。该PEC必须具有4个基本功能:·通过串行接口(例如IEEE 1394)接收压缩的页面数据;·从压缩形式产生页面的打印引擎。该打印引擎必须具备下列功能:扩展页面图像、抖动连续色调层、把黑色层复合到连续色调层上、增加红外标记(可选)、以及向打印头发送结果图像;·一个控制打印头和步进电机的打印控制器;·两个标准的低速串行端口,用于与两个QA芯片通信。需要注意的是,必须提供两个端口,而不能是一个端口,这样才能保证在鉴权过程中的高度安全性。
图1所示为从计算机系统向打印页面发送文档的数据流程图。文档在11处被接收,然后文档被装载到存储缓冲器12中,在存储缓冲器12中产生页面布局,并增加所需的对象。从存储缓冲器12中输出的页面在13中被光栅化,在14中被压缩,然后被送到打印引擎控制器10中。打印引擎控制器10接收压缩的页面图像,并保存在存储缓冲器15中,然后,存储缓冲器15中存储的压缩的页面图像被送到页面扩展器16中,并被还原为非压缩的页面图像。在17中,对连续色调层施加所需的抖动。在18中,黑色双层图像层被复合到连续色调层上,在19中,向复合后的图像加入红外标记。然后,在20中,复合后的页面数据被打印出来,形成页面21。
打印引擎/控制器接收压缩的页面图像,对页面进行扩展,并以管道方式打印页面。页面扩展和打印最好以管道方式实现,因为在内存中存储大小可变的双层CMYK+IR页面图像是不可能的。
在管道的第一个阶段中,打印引擎/控制器扩展以JPEG格式压缩的连续色调CMYK层(见下文),扩展以Group4传真格式压缩的双层抖动矩阵选择图(见下文),并扩展以Group4传真格式压缩的双层黑色层(见下文),所有扩展工作都以并行方式完成。同时,标记编码器对从压缩的页面图像得到的双层IR标记数据进行编码。在管道的第二个阶段中,打印引擎/控制器使用根据抖动矩阵选择图选择的抖动矩阵抖动连续色调CMYK层,把双层黑色层复合到所得到的双层K层上,并向页面增加IR层。在需要时,打印引擎/控制器还在C、M、Y、K、或IR通道中的每个点的位置上产生定色剂层。在管道的最后一个阶段中,打印引擎/控制器通过打印头接口利用打印头打印双层CMYK+IR数据(见下文)。
图2所示为打印引擎/控制器10与整个打印机系统体系的关系。打印机系统可能包含的部件有:· 一个打印引擎/控制器(PEC):一个PEC芯片10或芯片集负责接收压缩的页面数据,并把数据存储到存储缓冲器24中,进行页面扩展、黑色层复合,并把点数据发送给打印头23。PEC芯片10或芯片集还可以与QA芯片25,26通信,从而提供一种获得打印头特性数据的方法, 以保证最佳打印效果。PEC是本发明的主体。·一个存储缓冲器:存储缓冲器24用于存储压缩的页面图像,并且在打印特定页面的过程中用于擦除。存储缓冲器的构造和原理是现有技术,在使用本发明的PEC时,可以利用相关的各种标准的芯片和技术。·一个主QA芯片:主芯片25与可更换墨盒QA芯片26相匹配。QA单元的构造和工作原理为现有技术,在使用本发明的PEC时,可以利用相关的各种现有QA过程。例如,在同类美国专利申请中描述了一种QA芯片:
USSN |
我们的备案号 |
我们的标题 |
TBA |
AUTH01 |
验证协议和系统 |
09/112,763 |
AUTH02 |
用于保护芯片免受IDD波动冲击的电路 |
09/112,737 |
AUTH04 |
保护片上存储器(闪存和RAM)的方法 |
09/112,761 |
AUTH05 |
芯片的防篡改方法 |
09/113,223 |
AUTH06 |
对物理对象进行鉴权的系统 |
TBA |
AUTH07 |
验证协议和系统 |
TBA |
AUTH08 |
验证协议和系统 |
09/505,003 |
AUTH09 |
消耗品的鉴权协议和系统 |
09/517,608 |
AUTH10 |
消耗品的鉴权协议和系统 |
09/505,147 |
AUTH11 |
消耗品的鉴权协议和系统 |
09/505,952 |
AUTH12 |
对存储在闪存中的数值的非法更改 |
TBA |
AUTH13 |
处理安全数据的系统 |
09/516,874 |
AUTH14 |
带有防电源冲击的鉴权芯片 |
TBA |
AUTH15 |
秘密数据的保护处理 |
QA芯片通信功能最好包含在PEC芯片的总体功能中,因为它在图像扩展和驱动物理打印头方面有一定的作用。通过嵌入QA芯片的通信功能,可以保证打印页面时不会发生缺墨现象。另外,还可以使用一个鉴权芯片把QA嵌入到打印头组件中。由于它是主QA芯片,所以只包含鉴权密钥,不包含用户数据。但是,该芯片必须与墨盒的QA芯片匹配。墨盒中的QA芯片储存保证最佳打印质量所需的信息,它是使用一个鉴权芯片实现的。
最好使用64M位(8M字节)存储缓冲器存储压缩的页面图像。这样,当向缓冲器中写入一个页面时,可以同时从缓冲器中读取另一个页面(双缓冲)。另外,在打印页面时,PEC使用内存来缓冲计算得到的点信息。在打印第N个页面时,缓冲器用于:
·读取压缩页面N
·读取并写入页面N的双层点信息
·写入压缩页面N+1
打印引擎/控制器芯片最好带有一个简单的微控制器CPU核心35以执行下列功能:
·在打印页面间,通过串行接口36执行QA芯片鉴权协议
·在打印页面过程中,通过并行接口91驱动步进电机(步进电机需要5KHz的处理频率)
·在打印过程中使PEC芯片的各部分同步
·提供一种与外部数据请求(编程寄存器等)接口的方法
·提供与一种打印头段低速数据请求(例如读取向量属性和写入脉冲外形)接口的方法
·提供一种向外部DRAM写入横向和纵向打印标记的方法
由于所有图像处理工作都由专用的硬件执行,所以CPU不需要处理像素。因此,CPU可以非常简单。多种现有的CPU核心都可以胜任上述工作:任何一种具有足够处理能力执行所需计算和控制功能的处理器核心都可以使用。例如一个速度为1MHz的Philips 8051微控制器。可以为CPU核心35配备一个程序ROM和一个小的程序擦除RAM。CPU通过内存映射I/O与PEC芯片内的其它单元通信。可以把特定的地址范围与特定的单元映射,在每个地址范围内,可以把特定地址与相应单元的特定寄存器映射,其中包括串口36和并口91。在打印引擎/控制器芯片中可以集成一个比较小的程序闪存ROM,其大小取决于所选的CPU,但是不能超过8KB。同样,可以在打印引擎/控制器芯片中集成一个小的擦除RAM区。由于程序代码不需要处理图像,所以不需要很大的擦除区。RAM的大小取决于所选的CPU(例如堆栈机制、子程序调用规定、寄存器大小等),但是不能超过2KB。
使用上述基于引用段的页宽打印头的打印引擎/控制器芯片可以在全点阵分辨率(通常为1600dpi)下再生黑色,但是需要使用半色调处理以较低的分辨率再生连续色调颜色。因此,页面描述被分为黑色双层和连续色调层。黑色双层用于复合到连续色调层上。黑色双层由包含1位暗度/像素的位图构成。黑色层蒙罩的分辨率是打印机的全点分辨率的一个整数因子。它所支持的最高分辨率是1600dpi,即打印机的全点分辨率。连续色调层由包含32位CMYK颜色/像素的一个位图构成,其中的K是可选的。这种连续色调图像的分辨率是打印机的点分辨率的一个整数因子。对于单个打印引擎/控制器来说,它所支持的最高分辨率是320ppi/12英寸,即打印机的点分辨率的1/5。对于更高的连续色调分辨率,需要使用多个打印引擎/控制器,其中的每个打印引擎/控制器产生输出页面的一条。为了简化RIP中的计算,连续色调分辨率通常还是黑色双层分辨率的一个整数因子。但是,这不是一种强制要求。为了实现在打印机的内存中的高效存储,黑色双层和连续色调层都采用压缩形式。
图3所示为打印引擎的体系结构示意图。打印机引擎的页面扩展和打印管道由一个高速串行接口27(例如标准的IEEE 1394接口)、一个标准的JPEG解码器28、一个标准的Group 4Fax解码器、一个定制的半色调器/合成器29、一个定制的标记编码器30、一个行装载器/格式器单元31、以及一个连接打印头33的定制接口32构成。解码器28、88和编码器30向半色调器/合成器29缓冲。标记编码器30根据协议向页面增加红外标记或页面标记,协议与页面的使用有关。讨论标记的内容已经超出了本发明的范围。
打印引擎以双缓冲方式工作。一个页面从高速串行接口27通过DRAM接口89和数据总线90被装载到DRAM 34中,同时,已装载的前一个页面被从DRAM 34读出,并被通过打印引擎管道传送。当完成页面的打印时,刚刚装入的页面成为被打印页面,同时通过高速串行接口27向DRAM34装入一个新页面。在第一个阶段,管道扩展所有JPEG压缩的连续色调CMYK层,并扩展所有两个Group4传真压缩的双层数据流。上述两个数据流是一个黑色层(当然,打印引擎/控制器不知道是否为彩色,而且该双层可以定向到任何输出墨水)以及一个蒙罩(该蒙罩用于为连续色调的抖动选择抖动点阵,见下文的说明)。在第二个阶段,上述数据被并行地加入标记,以便随后以红外(IR)或黑色墨水渲染。最后,在第三个阶段中,对连续色调层进行抖动处理,并把位置标记和双层点层复合到抖动后的双层上。然后,数据流被很好地调整,以便在打印头中的重合段之间产生平滑的渐变效果,同时补偿打印头中的被堵喷嘴。在此阶段最多可以生成6个通道的双层数据。但是需要注意,并不是全部6个通道都出现在打印头上。例如,打印头可能只是CMY的,此时K被推入CMY通道,而IR被忽略。另外,如果没有IR墨水(或者出于测试目的),位置标记也可以被打印到K中。所得到的双层CMYK-IR点数据被缓冲并格式化,然后被通过一套行缓冲器(见下文的说明)输出到打印头上。大多数行缓冲器可以在芯片DRAM34中实现。在最后一个阶段中,通过打印头接口32打印上述6个通道的双层点数据。
在使用打印引擎/控制器的打印系统中通常采用压缩处理。这是为了降低主机和打印引擎/控制器之间的带宽要求以及降低页面存储的内存要求。在267ppi分辨率下,连续色调CMYK数据的一个信封页面的数据量为25MB。使用有损连续色调压缩算法(例如JPEG,见下文的说明),连续色调图像的压缩比可达到10∶1,同时不会对打印质量产生明显影响,因此,压缩后的页面大小为2.5MB。在800dpi分辨率下,双层数据的一个信封页面的数据量为7MB(压缩后)。连贯的数据(例如文本)的压缩效果很好。使用无损双层压缩算法(例如Group 4传真,见下文的说明),10点文本内容的压缩比可达到10∶1以上,因此上述信封页面的压缩数据量为0.8MB。经过抖动后,一个CMYK连续色调图像页面的数据为114MB双层数据。下文中所述的双层压缩页面图像格式综合利用了有损JPEG连续色调图像压缩算法和无损双层文本压缩算法的各自优点。经过压缩处理后,数据的格式已非常紧凑,实现了高效存储,同时保持了简单性,从而可以在打印过程中直接地、实时地扩展。由于文本和图像通常不重叠,所以在正常的最坏情况下,页面图像数据为2.5MB(即,完全为图像),而在最佳情况下,页面图像数据只有0.8MB(即,完全为文本)。在极端最坏情况下,页面图像数据为3.3MB(即,文本在图像之上)。假设图像占1/4页面,则页面图像数据为1.2MB。
对于通过慢速线路或噪音较高的电话线路传输无损压缩双层数据的情况,可以使用Group 3传真压缩算法(见ANSI/EIA 538-1988,Group 4传真设备的传真编码方案和编码控制功能,1988年8月)。双层数据代表在白色背景上扫描的黑色文本和图形。而且,上述算法还针对此类图像进行了优化(但是对于半色调双层图像没有进行优化)。1D Group 3算法以扫描宽度编码方法对每个扫描行进行编码,然后采用霍夫曼编码方法对所得到的扫描宽度编码。范围在0到63之间的扫描宽度使用终止编码处理;范围在64到2623之间的扫描宽度使用标记编码处理。每个标记编码为64的整数倍,后跟一个终止码。超过2623的扫描宽度使用多标记编码处理,后跟一个终止码。霍夫曼表是固定的,但是针对黑色和白色扫描分别进行了优化(但超过1728的标记编码除外,它们是通用的)。在可能的情况下,2D Group 3算法把一个扫描行作为一系列相对于前一个扫描行的短边偏移(delta)(0,±1、±2、±3)编码。delta符号是统一编码的(因此0偏移符号只占一位)。2D编码行中无法采用delta编码的边以扫描宽度编码处理,并加一个1D-前缀。而以2D编码的扫描行采用不同的方法标记。不管需要与否,1D编码的扫描行都以正常间隔产生,以便保证解码器可以从行噪中恢复数据,同时尽可能不损失图像质量。2D Group 3通常可以实现6∶1的压缩比(见Urban,S.J.,“传真系统的电子成像标准回顾”,电子成像杂志,1992年1月,Vol.1(1),第5-21页)。
对于通过无错通信线路(即,线路可实现真正无错传输,或者在较低的协议层进行纠错)传输数据的情况,使用Group 4传真算法(见ANSI/EIA 538-1988,Group 4传真设备的传真编码方案和编码控制功能,1988年8月)可以无损压缩双层数据。Group 4算法以2D Group 3算法为基础,其主要修改是:由于传输是无错的,所以不需要再为纠错而每隔一定间隔产生1D编码行。对于CCITT测试图像,Group 4算法的压缩比在20∶1到60∶1之间。Group 4压缩算法的设计目标和性能使其成为双层的一种理想压缩算法。但是,其霍夫曼表针对较低的扫描分辨率(100-400dpi)进行了优化,而且它会拙劣地编码超过2623的扫描宽度。在800dpi分辨率下,我们的最大扫描宽度是6400。虽然Group 4解码器核心可以在打印引擎/控制器中使用,它可能无法处理超过正常的400dpi传真应用中的扫描宽度,所以需要进行适当的修改。使用G4Fax对黑色层(通常为1600dpi)进行无损压缩的压缩比为10∶1以上。使用G4Fax对抖动矩阵选择层(通常为320dpi,与连续色调彩色层相配)进行无损压缩的压缩比为50∶1以上。
Group 4 Fax(G4 Fax)解码器负责对双层数据进行解压缩。双层数据被限制为单点颜色(通常黑色用于文本和线图像),抖动矩阵选择位图用于对连续色调数据(由JPEG解码器解压缩)进行后续抖动。输入G4 Fax解码器的数据是从外部DRAM读取的2个平面的双层数据。由G4 Fax解码器输出的数据是2个平面的解压缩的双层数据。解压缩后的双层数据被送到半色调器/合成器单元(HCU)进行打印管道中的下一个阶段的处理。两个双层数据缓冲器用于在G4 Fax解码器和HCU之间传送双层数据。每个解压缩的双层被输出到两个行缓冲器中。每个缓冲器可以储存一个最大分辨率的12英寸整点线。采用两个行缓冲器的好处是,当HCU读取一行数据时,G4 Fax解码器可以写入另一行数据。这是非常重要的,因为单个双层行通常低于1600dpi,所以必须在点和行方向上同时扩展。如果缓冲低于一个整行,那么G4 Fax解码器就必须对同一行多次解码——每次用于输出一个600dpi点线。
点颜色1能够使输出图像的单个彩色平面具有高分辨率的点数据。虽然连续色调层为图像提供的足够的分辨率,但是点颜色(1)更适用于文本和线图形(通常为黑色)的应用。当点颜色用于文本和线图形时,压缩比通常可以超过10∶1。点颜色1支持的最高分辨率为1600dpi。因此,每个行缓冲器的数据为2400B(12英寸×1600dpi=19200位)。
抖动矩阵选择图的分辨率应该较好地匹配连续色调分辨率。所以每个行缓冲器的数据是480B(3840位),可以存储320dpi的12英寸点线。当抖动矩阵选择图与连续色调的分辨率匹配时,压缩比一般可以超过50∶1。
为了支持下列功能:
·800dpi点颜色1层(通常为黑色)
·320dpi抖动矩阵选择层
为了实现1页/秒的打印速度(无论页宽是12英寸还是8.5英寸),压缩带宽应为9.05MB/秒,在最高打印速度时(30000行/秒),对于12英寸页面宽度和8.5英寸页面宽度,所需的压缩带宽分别为20MB/秒和14.2MB/秒。当解压缩数据被输出到行缓冲器中时,G4 Fax解码器可以快速地、同时地从每个输出中解压缩出行数据。
G4 Fax解码器通过DRAM接口直接从主存储器中接收数据。压缩量决定了与外部DRAM之间的带宽要求。由于G4 Fax是无损压缩的,所以图像的复杂程度影响数据量和带宽。通常一个800dpi黑色文本/图形层的压缩比超过10∶1,所以1页/秒的打印速度需要0.78MB/秒的带宽。同样,通常一个320dpi抖动选择矩阵的压缩比在50∶1以上,所以1页/秒的打印速度需要0.025MB/秒的带宽。对与最快打印速度,320dpi抖动选择矩阵和800dpi点颜色1所需的带宽分别为1.72MB/秒和0.056MB/秒。因此,2MB/秒的总带宽完全可以满足DRAM的带宽要求。
G4 Fax解码功能通过G4 Fax解码器核心实现。可以使用各种G4 Fax解码器核心:只要这种G4 Fax解码器核心的处理速度足以执行所需的计算和控制功能。G4 Fax解码器核心必须能够处理在超过400dpi分辨率的传真应用中的扫描宽度,因此可能需要进行一些修改。
JPEG压缩算法(见ISO/IEC 19018-1:1994,信息技术——连续色调静态图像的数字压缩和编码:要求与原则,1994)在特定质量等级上对连续色调图形进行有损压缩。在压缩比低于5∶1时,JPEG算法不会给图像质量带来可见影响。在压缩比低于10∶1时,图像质量的下降可以忽略(见Wallace,G.K.,“JPEG静态图形压缩标准”,ACM通信,Vol.34,No.4,1991年4月,30-44页)。JPEG通常首先把图像转化为一个颜色空间,该颜色空间把亮度和色度分离为独立的颜色通道。这样,色度通道可以被二次取样,同时不会使图像质量降低很多,因为人类视觉系统对亮度的敏感性要比对色度的敏感性强得多。经过第一步后,对每个颜色通道独立压缩,把图像分解为8×8的像素块。然后,通过离散余弦变换(DCT)把每个像素块变换为频域。这种变换相对较低的频率因子中的图像能量集中,从而较高频率因子能够自然地量化。这种量化是JPEG中的主要压缩源。下一步,根据频率排列因子,尽可能使零因子相邻,然后以扫描宽度编码处理零因子,从而实现进一步压缩。最终,对扫描宽度和非零频率因子进行统一编码。解压缩是压缩的反过程。
CMYK(或CMY)连续色调层被压缩为一个平面颜色JPEG字节流。如果出于表共享或色度二次取样的目的需要进行亮度/色度分离,那么CMYK将被转化为YCrCb和Cr,而Cb被适当地二次取样。JPEG字节流是完整的、自包容的。它包含解压缩所需的全部数据,包括量化和霍夫曼表。
JPEG解码器负责对连续色调数据层进行实时解压缩。向JPEG解码器输入的数据最多可以是4个平面的连续色调数据。输入数据通常可以是3个平面,代表CMY连续色调图像,也可以是4个平面,代表CMYK连续色调图像。虽然一般情况下所有颜色平面的分辨率是相同的,但是每个颜色平面的分辨率也可以不同。连续色调层从外部DRAM读取。JPEG解码器的输出是解压缩的连续色调数据,这些连续色调数据在独立的颜色平面中。解压缩后的连续色调图像被送到半色调器/合成器单元(HCU)29,进行打印管道的下一个阶段的处理。4个平面连续色调缓冲器用于在JPEG解码器和HCU 29之间传送连续色调数据。
解压缩后的连续色调数据的每个颜色平面被输出到一套双行缓冲器(见下文的说明)中,每个行缓冲器的容量为3840B,因此可以存储12英寸宽的320ppi分辨率的单个颜色平面的像素。行缓冲的目的,当HCU从一个行缓冲器中读数据时,JPEG解码器可以向另一个行缓冲器写数据。这是非常重要的,因为单个连续色调行通常低于1600dpi,所以必须在点和行方向上同时扩展。如果缓冲低于一个整行,那么JPEG解码器就必须对同一行多次解码——每次用于输出一个600dpi点线。虽然JPEG支持多种分辨率,但是必须在分辨率和可用带宽之间进行权衡。当分辨率和颜色数增加时,带宽要求也随之增加。另外,打印引擎/控制器芯片的目的段的数量也会影响带宽和分辨率。注意,由于连续色调图像以平面格式被处理,所以每个颜色平面可以采用不同的分辨率存储(例如,CMY平面的分辨率可以高于K平面的分辨率)。所支持的最高连续色调分辨率是1600dpi(与打印机的全点分辨率匹配)。但是,输出行缓冲器的容量只能储存12英寸320ppi的连续色调像素。如果需要以更高连续色调分辨率输出完整的12英寸宽度,那么需要使用多个打印引擎/控制器,但是需要注意的是,打印机上的最终输出仍是双层数据。如果支持320ppi的4种颜色,对于1页/秒的打印速度(页宽可以是12英寸或8.5英寸),解压缩后的输出带宽应为40MB/秒;对于最高的打印机速度性能(30000行/秒),12英寸和8.5英寸页宽所要求的解压缩输出带宽分别为88MB/秒和64MB/秒。
JPEG解码器通过DRAM接口直接从主存储器接收数据。压缩量决定了与外DRAM进行数据传输的带宽要求。当压缩水平提高时,带宽会相应降低,但是最终的输出图像的质量也同时降低。单个颜色平面的DRAM带宽可以通过压缩带宽×压缩比的方式快速得出。例如,为了实现1页/秒的打印速度,压缩比为10∶1的320ppi的单个颜色平面所要求与DRAM通信的带宽为1MB/秒。
JPEG的功能由一个JPEG核心实现。有多种JPEG核心可用:只要它具有足够的处理能力来执行所需的计算和控制功能。例如,BTG X-March核心的解压缩速度最高可达140MB/秒,对于最高的打印机速度(1600dpi,30000行/秒),它可以对4个400ppi的连续色调颜色平面同时解压缩;对于1页/秒的打印机速度,它可以对4个800ppi的连续色调颜色平面同时解压缩。需要注意的是,上述JPEG核心只需要支持解压缩功能,因此,降低了对通用型JPEG压缩/解压缩核心的要求。由于解压缩数据被输出到行缓冲器中,所以JPEG解码器可以一次快速解压一个颜色平面的一整行,消除了在上下文中的行处理中的切换工作,同时简化了JPEG解码器的控制。此时,必须维护4个上下文(每个颜色平面使用一个上下文),每个上下文包含外部DRAM的当前地址以及适当的JPEG解码参数。
图4所示为半色调器/合成器单元(HCU)29把半色调和连续色调(通常是CMYK)层合并为一个双层,并把Spot1双层复合到适当的半色调连续色调层上。如果打印机中没有K墨水,那么HCU 29可以把K适当地映射为CMY点。它还根据抖动矩阵选择图中的相应数值逐点选择抖动矩阵。HCU 29的输入是(从JPEG解码器单元)通过缓冲器37输入的一个扩展的连续色调层,通过缓冲器38输入的一个扩展的双层Spot 1层,通过缓冲器39输入的一个扩展的抖动矩阵选择位图(通常与连续色调层的分辨率一样),以及通过缓冲器40输入的全点分辨率的标记数据。HCU 29最多可以使用从外部DRAM 34读取的两个抖动矩阵。由HCU 29向行装载器/格式器单元(LLFU)41的输出是一套打印机分辨率双层图像行,最多可以达到6个颜色平面。连续色调层一般是CMYK或CMY,而双层Spot 1层是K。
图5中更详细地显示了HCU单元。在启动后,HCU不断运行,直到检测到一个页面结束条件或通过其控制寄存器被明确停止。HCU的第一个任务是把从缓冲器平面(例如42)中接收并存储到各个比例单元(例如比例单元43)中的数据在水平和垂直方向上同时缩放为打印机的分辨率。
比例单元提供了在水平和垂直方向上把连续色调数据或双层数据缩放为打印机分辨率的一种方法。缩放是通过把上述两个方向上的数据值复制为该值的整数倍而实现的。缩放数据的处理过程为现有技术。
页边单元57向比例单元43提供两个控制位:前进点和前进行。前进点位允许状态机为同一个点数据生成多个实例(用于页边和为打印头中的重叠段创建点数据)。前进行位允许状态机控制特定点线的结束时间,从而根据打印机的页边,截断数据。它还使比例单元不必执行特殊的行结束逻辑。比例单元的输入数据是一个整行缓冲器。该行被重复使用比例因子次,以便通过行复制实现垂直方向的缩放,在每一行中,每个值被重复使用比例因子次,以便通过像素复制实现水平方向的缩放。当输入行被重复使用比例因子次时(前进行位已经被设置为比例因子次),地址的输入缓冲选择位被切换(双缓冲)。缩放单元的逻辑对于8位和1位的情况都是相同的,因为比例单元只产生地址。
由于每个连续色调层可以使用不同的分辨率,所以每个连续色调层被单独缩放。缓冲器45中的双层Spot 1层和缓冲器46中的抖动矩阵选择层也需要缩放。由于缓冲器47中的双层标记数据是以正确的分辨率建立的,所以不需要缩放。缩放后的抖动矩阵选择位被抖动矩阵存取单元48用于从两个抖动矩阵中选择一个8位值。该8位值被输出到4个比较器中(44,49-51),在这些比较器中,它们与特定的8位连续色调值相比较。实际抖动矩阵的产生与打印头的结构有关,而产生抖动矩阵的过程为现有技术。如果连续色调值大于或等于上述8位抖动矩阵值,那么就输出1,否则输出0。在52-56中,这些位与从页边单元57而来的inPage位(指示特定点是否在页面的可打印区域内)进行“与(AND)”操作。HCU中的最后一个步骤是合成步骤。对于6个输出层中的每一层,都有一个单点合并单元(例如单元58),每个单点合并单元使用6个输入值。每个点合并单元的输出位是上述输入位的合并值。这样,点颜色就能够被放入到任何输出颜色平面中(包括用于测试的红外颜色平面),黑色被合并到青色中、洋红色和黄色(CMY)中(如果打印头中没有黑色墨水),而标记点数据被放入到一个可见平面中。定色剂颜色层也可以立即生成。点再生单元(DRU)59负责把为特定颜色层产生的点流组织到32位数值中,这样,输出内容被按段排列,而在每一段中,输出内容被按点排列。由于叠加段的点不是以段顺序生成的,所以还需要进行稍许调整。
页边单元57向比例单元43提供两个控制位:前进点和前进行。前进点位允许状态机为同一个点数据生成多个实例(用于页边和为打印头中的重叠段创建点数据)。前进行位允许状态机控制特定点线的结束时间,从而根据打印机的页边,截断数据。它还使比例单元不必执行特殊的行结束逻辑。
比较器单元带有一个简单的8位“大于”比较器。该比较器用于确定8位连续色调值是否大于8位抖动矩阵值。因此,比较器单元使用两个8位输入,并产生一个1位长度的输出。
图6中更详细地显示了点合并单元。点合并单元提供了一种把双层抖动数据、Spot 1颜色以及标记数据与实际打印头的输出墨水映射的方法。每个点合并单元使用6个1位输入,产生一个1位长度的输出,该输出值代表颜色平面的输出点。在60处的输出位是输入位的合并值。这样,点颜色可以被放入到任何输出颜色平面中(包括用于测试的红外颜色平面),黑色被合并到青色中、洋红色和黄色(CMY)中(如果打印头中没有黑色墨水),而标记点数据被放入到一个可见平面中。定色剂颜色层可以通过简单地合并所有输入位生成。点合并单元包含一个6位ColorMask寄存器61,该寄存器中的值作为6个输出位的掩码。每个输出位与相应的ColorMask寄存器位进行“与(AND)”操作,然后,把所得到的6位进行“或(OR)”操作,形成最终的输出位。
图7所示为点再生单元(DRU),该单元负责为特定颜色平面把生成的位流组织到为32位数值中,这样,输出内容被按段排列,而在每一段中,输出内容被按点排列。由于叠加段的点不是以段顺序生成的,所以还需要进行稍许调整。DRU带有一个32位移位寄存器,一个普通的32位寄存器、以及一个普通的16位寄存器。一个5位计数器跟踪所处理的位数。抖动矩阵存取单元(DMAU)发出的点前进信号被用于指示DRU输出具体位值。
图7中,寄存器(A)62每个周期移位一次。它包含32个由点合并单元(DMU)最近产生的点。每过32个周期,寄存器(A)62中的全部32位值被复制到寄存器(B)63中,复制动作由DRU状态机64通过一个简单的5位计数器产生的WriteEnable信号触发。在WriteEnable脉冲的同时,寄存器(B)63中的16位奇数位(1,3,5,7等)被复制到寄存器(C)65中。然后,一个32位多路器根据状态机中的2位在下列3个输出中做出选择:● 寄存器B中的全部32位● 由寄存器A中的16个偶数位(0,2,4,6等)和寄存器B中的16个偶数位构成的一个32位值。寄存器A的16个偶数位构成该32位值的0-15位,而寄存器B中的16个偶数位构成该32位值的16-31位。● 由寄存器B中的16个奇数位(1,3,5,7等)和寄存器C中的16位构成的一个32位数值。寄存器C中的位构成该32位值的0-15位,而寄存器B中的16个奇数位构成该32位值的16-31位。
DRU的状态机如表1所示。状态机的起始状态为0,每隔32个周期改变状态。在一个32周期过程中,一个noOverlap位为该32周期累计所有dot advance位的“与(AND)”值(周期0的noOverlap=dotadvance,周期1-31的noOverlap=noOverlap AND dot advance)。
表1.DRU的状态机
状态 |
NoOverlap |
输出 |
输出有效 |
注释 |
下一个状态 |
0 |
X |
B |
0 |
起始状态 |
1 |
1 |
1 |
B |
1 |
正常的non-overlap |
1 |
1 |
0 |
B |
1 |
A 包含第一个overlap |
2 |
2 |
X |
偶数A,偶数B |
1 |
A 包含第二个overlapB 包含第一个overlap |
3 |
3 |
X |
C, 奇数B |
1 |
C 包含第一个overlapB包含第二个 |
1 |
图5中的页边单元(MU)57负责根据当前页的页边距把从抖动矩阵存取单元(DMAU)48获得的前进点和前进行信号转化为一般控制信号。它还负责生成end of page条件。MU的计数器保存着当前页的点和行的数值。在一页开始时,这两个值都为0。每次当MU从DMAU接收一个dotadvance信号时,点计数器加1。当MU从DMAU接收到line advance信号时,行计数器加1,而点计数器被置0。在每个周期内,把当前行和点值与页边值进行比较,然后根据这些页边值输出dot advance、lineadvance,和within margin信号。DMAU只包含HCU的实际存储要求。
图8所示为行装载器/格式器单元(LLFU)的示意图。LLFU从HCU接收点信息,为特定的打印行把点装载到适当的缓冲器中(某些在芯片中,某些在外部DRAM34中),并把这些点数据格式化为打印头所需的顺序。图9为一个LLFU的外部接口的高级模块图。向LLFU的输入67是一组32位字和一个DataValid位,这些数据都由HCU产生。输出68是一组90位的值,代表6种颜色的15个打印头段的最大值。并不是所有输出位都有效,这与打印头中实际使用的颜色数有关。
本文中所述的打印头的喷嘴部分由两排喷嘴构成,也就是说,同一种颜色的奇数和偶数点在不同的行上打印,偶数点用于行L,而奇数点用于行L-2。另外,在一种颜色的点与另一种颜色的点之间有若干行。因为HCU同时计算相同点位置的6个颜色平面,所以必须为每个颜色平面延迟点数据,直到同一个点定位到相应的彩色喷嘴上。
每个缓冲行的大小取决于打印头的宽度。由于每个打印引擎/控制器为多达15个打印头段产生点数据,所以单个奇数缓冲行或偶数缓冲行由15套640点组成,总数据量为9600位(1200B)。例如,color 6奇数点所需的缓冲器为45KB。
所有必要的缓冲器最好内建在打印引擎/控制器芯片中。否则,colors 2以上的缓冲器应存储在外部DRAM芯片中。这样,即使将来颜色平面之间的距离发生变化,打印引擎/控制器仍然可用。在打印引擎/控制器上保存color 1的偶数点意义不大,因为所有内容都是相对于该特定点线(不需要额外的行缓冲器)打印的。另外,缓存color 1奇数点所需的2个半行可节省实际的DRAM带宽。在打印页面前,各种行缓冲器(片上缓冲器和DRAM缓冲器)都需要预置0,使打印页面有一个空边。页面的结尾由HCU自动产生,所以页面将有一个空边。
图10是Color N OESplit(见图9的Oesplit 70)的模块图,图9中的每个缓冲器(E、F、71、72)的模块图可以在图10和图11中找到。缓冲器EF是一种双缓存机制,用于向图3中所示的打印头接口(PHI)32传输数据。因此,缓冲器E和F具有相同的结构。在点线的处理过程中,当上述缓冲器(E、F)中一个用于写数据时,另一个用于读数据。这两个缓冲器在接收到从PHI发来的行同步信号时进行逻辑交换。缓冲器E和F都由6个子缓冲器构成,一个子缓冲器对应一个颜色,如图11所示。Color 1的子缓冲器编号为73。每个子缓冲器的容量是2400B,足以储存15个1280点/段的段。由于内存是以32位方式读写的,所以每个子缓冲器有600个地址(需要10个地址位)。在每个颜色的子缓冲器中,所有偶数点都被放在奇数点的前面。如果有未用的空间(用于少于15个段的打印),那么未用空间应位于每个颜色的子缓冲器的末端。每个子缓冲器实际使用的存储量与打印引擎/控制器实际编址的端数量直接相关。对于一个15段打印头,由1200B个偶数点,后跟1200B个奇数点,没有未用空间。所使用的子缓冲器的数量与打印头所用的颜色数直接相关。所支持的最多颜色数为6。
每个缓冲器(E、F)的寻址编码电路可以保证在一个特定周期中对所有6个子缓冲器进行一次32位访问——可以从所有6个缓冲器读取数据,也可以向其中的某个缓冲器写入数据。从每个颜色缓冲器中读取的32位中,只有一位被选择用来构成6个输出位的输出。这个过程在图11中示出。地址的15位中,10位地址用于选择32位数据,5位地址用于从所选的32位数据中选择1位,从而获得要读取的1位数据。每个子缓冲器(73-78)都有自己的WriteEnable行,因此,一个32位值可以在给定周期内写入特定的颜色缓冲器。这些WriteEnable行是通过上述WriteEnable输入与ColorSelect的解码形式的“与(AND)”操作实现的。行79的DataIn的32位是共享的,因为实际上只有一个缓冲器接受数据。
用于从缓冲器E和F中读取数据的地址是直接生成的。每个周期产生一个用于为特定段取上述6位数值(1位/颜色)的位地址。通过向当前位地址上加640,可以转到下一个段中的对应点。加640而不是1280是因为,在缓冲器中奇数和偶数点是分离的。对上述动作重复NumSegments次,可以取回代表偶数点的数据,然后把这些位传送给PHI。当NumSegments=15时,位数为90(15×6位)。然后,为奇数点重复上述过程。因此,完整的偶数/奇数位生成过程需要重复动作640次,每次需对起始地址加1。采取这种方法,所有点数据都在640×2×NumSegments个周期中被以打印头所需要的顺序传递到PHI中。当NumSegments=15时,要经历19200个周期。需要注意的是,不管在打印头中实际使用的颜色数是多少,在给定读取周期中,都会产生6位数值(每位用于1个颜色缓冲器)。
另外,我们为写入到图9中的90位Transfer寄存器90产生TWriteEnable控制信号。由于LLFU在PHI之前开始,我们必须从PHI传送Advance脉冲前的第一个值。我们还必须为第一个Advance脉冲产生下一个值。方法是在NumSegments周期后把第一个值传送给Transfer寄存器,然后停止NumSegments个周期,等待Advance脉冲启动下一个NumSegments周期组。当第一个Advance脉冲到达时,LLFU将与PHI同步。
单个点线的读取过程在下面的伪代码中说明:
DoneFirst=FALSE
WantToXfer=FALSE
For DotInSegment0=0 to 1279
If(DotInSegment0:bit0==0)
CurrAdr=DotInSegment0(high bits)(puts in range 0 to 639)
EndIf
XfersRemaining=NumSegments
<!-- SIPO <DP n="29"> -->
<dp n="d29"/>
Do
WantToXfer=(XfersRemaining==0)
TWriteEnable=(WantToXfer AND NOT DoneFirst)OR PHI:ADVANCE
DoneFirst=DoneFirst OR TWriteEnable
Stall=WantToXfer AND(NOT TWriteEnable)
SWriteEnable=NOT(Stall)
If(SWriteEnable)
Shift Register=Fetch 6 bits from
EFSense[ReadBuffer]:CurrAdr
CurrAdr=CurrAdr+640
XfersRemaining=XfersRemaining-1
EndIf
Until(TWriteEnable)
EndFor
Wait until BufferEF Write process has finished
EFSense=NOT(EFSense)
当读进程从E或F向PHI传送数据时,一个写进程正在准备另一个缓冲器中的下一个点线。
被写入E或F的数据是由HCU产生的color 1数据以及从缓冲器D(由DRAM提供数据)提供的color 2-6数据。每当HCU的OutputValid被置为真时,Color 1数据就被写入EF中;在其它时间,color 2-6数据被从寄存器C中写入EF。
图9中的缓冲器OE1 81是一个32位寄存器,它用于存储某个HCU为color 1产生的连续32个点的集合。虽然点在页面上是连续的,但是奇数和偶数点不是同时打印的。
缓冲器AB 82采用一种双缓存机制,它为color 1把奇数点数据延迟2个点线。因此,缓冲器A和B的结构是相同的。在点线的处理过程中,一个点线被从缓冲器中读取,其中一个点线被读取,然后被写入。当整个点线处理完成后,这两个缓冲器互换逻辑。一个1位标志ABSense确定从哪个缓冲器中读取以及向哪个缓冲器写入。
每当输出有效控制标志被设置为真时(在第一个标志发送后,每隔32个周期设置一次),HCU提供color 1的32位数据。这32位数据为一个点线定义了一个连续的32点集,其中有16个偶数点(位0、2、4等),16个奇数点(位1、3、5等)。输出有效控制器标志作为OE1寄存器81的WriteEnable控制标记。我们每隔2个OutputValid信号处理一次HCU数据。HCU color 1的16个偶数位被与寄存器OE1的16个偶数位合并,产生32位的偶数color 1数据。同样,HCU的16个奇数位被与寄存器OE1的16个奇数位合并,产生32位的奇数color 1数据。在收到第一个OutputValid信号时,我们读取缓冲器AB的数据,把奇数数据传送给缓冲器EF中的color 1,如图11中的73。在收到第二个OutputValid信号时,我们把奇数数据的32位写入上述缓冲器AB中,然后把偶数数据的32位写到缓冲器EF的color 1中。
每当OutputValid被设置为真时,HCU就为每个颜色平面提供32位数据。这种动作每隔32个周期出现一次(不包括在特定启动时间内)。这32位数据为一个点线定义了一个连续的32点,其中包含16个偶数点(位0、2、4等)和16个奇数点(位1、3、5等)。
虽然缓冲器OE1(图10中的83)用于为color 1存储一个32位值,但是缓冲器OE2到OE6分别用于为color 2到color 6存储一个32位值。正如color 1的点每隔64个周期(每隔两个OutputValid标志)被分为代表color 1的奇数点的32位数据和代表color 1的偶数点的32位数据一样,其它颜色平面的点也被划分为偶数和奇数点。
但是,点数据被延迟若干行,然后被通过缓冲器CD(图9中的84)输出到DRAM中,而不是直接写入缓冲器EF中。当特定行的点被写入DRAM时,前一行的点被从DRAM中读出,并被写入缓冲器E、F(71,72)。这个过程必须与把color 1写入缓冲器EF的过程交错进行。
每次从HCU收到一个OutputValid标志时(如图10中的85行),颜色N的32位数据就被写入缓冲器OEN 83。每次收到第二个OutputValid标志时,合并后的64位数据就被写入颜色缓冲器N 86。对于颜色平面2-6,这个过程是并行进行的。颜色缓存区N 86含有40套64位数据(320B),以便为两个完整的段存储点数据。这样,前一个段的数据(包括奇数和偶数点)在一个整段生成时间(20×64=1280周期)内被输出到DRAM中。写入操作的地址是直接生成的。行87的ColorNWriteEnable信号每隔两个OutputValid标志产生一次。地址从0开始,每隔两个OutputValid标记增加1,直到39。当地址到达39时,它将被重置为0,而不是步进到40,这样可以实现双缓冲方案。只要在OutputValid标记出现之间不发生读操作,上述工作就一直进行,并且前一个段的数据可以在产生单个段的数据的时间内被写入到DRAM中。下面的伪代码说明了上述过程:
adr=0
firstEncountered=0
While(NOT AdvanceLine)
If(HCU_OutputValid)AND(firstEncountered))
ColorNWriteEnable=TRUE
ColorNAdr=adr
If(adr==39)
adr=0
Else
adr=adr+1
EndIf
Else
ColorNWriteEnable=FALSE
EndIf
If(HCU_OutputValid)
firstEncountered=NOT(firstEncountered)
EndIf
EndWhile
读操作的地址生成过程比较复杂一些,因为它与DRAM读写(包括读和写)、缓冲器EF的读写、以及color 1的生成时间有关。读操作的地址生成过程在下面进一步说明。
缓冲器C、D、E、F和color N的地址生成都与DRAM读写的时间有关,并且不能影响与缓冲器E和F有关的color 1的处理。地址生成的基本原理是,把color N(奇数点或偶数点)的一个段的数据从DRAM中通过缓冲器CD传送给缓冲器EF。当从DRAM中读出数据时,根据ColorBufferN中的值替换上述点,同样,对奇数和偶数点中的每种颜色执行相同的过程。当累积了一个完整段的所有点数据后(需要20个64周期),重新开始上述过程。当把给定行的所有段的数据在寄存器与DRAMA之间传输完成后,把该颜色的DRAM的当前地址步进1次,直到把该颜色的点线的特定数据从DRAM中读回。在本处理方法中,DRAM与一种FIFO非常相似。最终的结果是,color N(偶数或奇数点)被从DRAM中读入缓冲器D,同时color N(前述偶数或奇数点)被复制到缓冲器C中。向缓冲器C复制数据需要20或21个周期,具体周期数取决于OutputValid标志是否在20次传输过程中出现。当上述两个操作都完成后(通常,DRAM存取是一种较慢的工作),过程的第二部分开始。也就是说,把缓冲器C中的数据写入到DRAM中(写到上述读操作的同一个地点),并且把缓冲器D中的数据复制到缓冲器EF中(同样,由于正在传输color1的数据,所以当OutputValid标志出现时,不会传输color N的数据)。当上述两个操作完成后,为color N(奇数或偶数点)执行相同的过程,然后为每个剩余的颜色也执行相同的过程。上述的完整双过程被重复执行10次。然后,为下一行的处理更新DRAM中存储的每个当前行的地址。
在带宽方面,为点数据缓存区存取DRAM会占用从打印引擎/控制器访问DRAM的大部分带宽。对于每一个打印行,需要为color 2-6读取整个点线,并且为color 2-6写入整个点线。因此,15个段(最多)的数据量为2×5×15×1280位=192000位(24000 B)/打印行。对于最快速的打印系统(30000行/秒),带宽必须为687MB/秒。对于1页/秒的打印系统,所要求的带宽为312MB/秒。由于所要求的带宽太高,所以必须针对所用的存储器类型优化DRAM中每种颜色的各种半行的地址。例如,在一个RDRAM存储器系统中,为了最大限度地增加DRAM存取的打印页面点数,必须为每种颜色把第一个半行缓冲器调整为1KB范围。当处理各种段时,如果下一段的起始位置在1KB页面中的960B处,那么640位存取会跨越2个页面。为此,可以使用DRAMMaxVal变量检查这种情况。如果这种情况发生,那么就需要把下一个半行缓冲器的地址调整为与页面对齐。这样虽然每13段会浪费64B存储空间,但是640位存取将完全发生在一个页面中。
上述的地址生成过程可以视为NumSegments需要10个(20×32位读操作+20×32位写操作)。下面的伪代码可以说明这种地址生成过程:
EFStartAdr=0
Do NumSegments times:
For CurrColor=0 to MaxHalfColors
DRAMStartAddress=ColorCurrAdr[CurrColor]
While reading 640 bits from DRAMStartAddress into D(>=
20 cycles)
ColorNAdr=0
<!-- SIPO <DP n="35"> -->
<dp n="d35"/>
While(ColorNAdr!=20)
If(NOT HCU_OutputValid)
Transfer
ColorNBuffer[ColorNAdr|CurrColor_bit0]to C[ColorNAdr]
ColorNAdr=ColorNAdr+1
EndIf
EndWhile
EndWhile-wait until read has finished
While writing 640 bits from C into DRAMStartAddress
(>=20 cycles)
ColorNAdr=0
EFAdr=EFStartAdr
While(ColorNAdr!=20)
If(NOT HCU_OutputValid)
Transfer D[ColorNAdr]to EF[CurrColor|EFAdr]
If((ColorNAdr==19)AND(CurrColor==
NumHalfColors))
EFStartAdr=EFAdr+1
Else
EFAdr=EFAdr+1
EndIf
ColorNAdr=ColorNAdr+1
<!-- SIPO <DP n="36"> -->
<dp n="d36"/>
EndIf
EndWhile
EndWhile-wait until write has finished
If(DRAMStartAddress==DRAMMaxVal)
ColorCurrAdr[currColor]=round up DRAMStartAddress
to next 1KByte page
Else
ColorCurrAdr[currColor]=DRAMStartAddress+640
bits
EndIf
If(Segment==maxSegments)
If(ColorCurrRow[CurrColor] ==
ColorMaxRow[CurrColor])
ColorCurrRow[currColor] =
ColorStartRow[currColor]
ColorCurrAdr[currColor] =
ColorStartAdr[currColor]
Else
ColorStartRow[currColor] =
ColorCurrRow[currColor]+1
EndIf
EndIf
<!-- SIPO <DP n="37"> -->
<dp n="d37"/>
EndFor
EndDo
Wait until next Advance signal from PHI
需要注意的是,MaxHalfColors寄存器应小于需要对奇数颜色和偶数颜色单独处理的颜色(但不包括color 1)数。例如,对于一个标准的6颜色打印系统,需要处理的总颜色数(包括奇数颜色和偶数颜色)为10(colors 2-6的奇数和偶数色),所以应该把MaxHalfColors设置为9。
LLFU需要2个NumSegments周期来为PHI准备数据的第一个180位。因此,必须在已经LLFU启动2个NumSegments周期的时间后才能启动打印头和开始第一个LineSync脉冲。这样Transfer的初始值才有效,也才能向Transfer寄存器中装入下90位数据。
打印头接口(PHI)是处理器向打印头装载要打印点的途径,它控制着实际的点打印过程。它从LLFU接收数据,并把数据输出给打印头。PHI必须能处理各种打印头宽度和格式。为了能够适应各种定制要求,PHI的参数设置如表33所示:
表33.基本打印参数
名称 |
描述 |
范围 |
MaxColors |
打印头中的颜色数 |
1-6 |
SegmentsPerXfer |
每次传输向多少段写入数据。该值等于最大的段组中的打印段数 |
1-8 |
SegmentGroups |
打印头的段组数 |
1-2 |
PHI的内部结构应支持6种打印颜色、每次传输8个段、以及2个段组。这样才能满足能够以全页宽打印A4/信封幅面的15段(8.5英寸)打印机的要求。必要时,可以采用多个打印引擎/控制器共同进行宽行打印。
打印头接口(PHI)包括:· 一个LineSyncGen单元(LSGU),该单元为多个打印引擎/控制器芯片和步进电机提供同步信号(允许并排打印和前/后打印)。· 一个Memjet接口(MJI),该接口向Memjet打印头传送数据。
图12所示为打印头接口(PHI)32的内部结构示意图。PHI中有两个LSGU单元89、90,第一个LSGU 90产生LineSync0(LS0),用于控制所有同步的芯片中的Memjet接口(MJI);第二个LSGU 89产生LineSync1(LS1),用于向进纸步进电机发送脉冲信号。
芯片中的主/从针脚91允许多个芯片通过主/从关系连接在一起,实现并排打印或前/后打印。当主/从针脚接VDD时,芯片作为主芯片,此时,由LineSyncGen单元90产生的LineSync同步脉冲被加在两个三态Line-Sync公共行LineSync0信号上,然后通过两个三态启用92,使信号由所有芯片共享。当主/从针脚接GND时,芯片作为从芯片,由LineSyncGen单元89、90产生的LineSync脉冲不会被加到公共LineSync行上。采取这样的方式,主芯片的LineSync脉冲信号可由给所有连接的芯片中的所有PHI共享。
LineSyncGen单元(LSGU)89、90负责产生打印页面所需的同步脉冲信号。每个LSGU产生一个外部LineSync信号,以支持行同步。当接收到“Go”指令时,LGSU内的一个产生器产生一个LineSync脉冲,并且每隔一定周期就产生一个LineSync脉冲,直到收到“Stop”信号。LineSync脉冲定义下一行的开始。LineSync脉冲之间的周期数由CyclesBetweenPulses寄存器确定,每个产生器都有一个CyclesBetween-Pulses寄存器。但是,LineSync信号的间隔时间必须足够长,以保证打印一行,同时装入另一行。但是也不能太长(例如为了满足送纸电路的特殊要求)。如果CyclesBetweenPulses寄存器的值低于打印一行的时间,那么无法正确打印页面,因为在打印完成一行之前,LineSync脉冲信号就已经到来了。
LSGU中含有下列接口寄存器:
表34.LineSyncGen单元的寄存器
寄存器名称 |
描述 |
CyclesBetweenPulses |
产生LineSync脉冲信号之间的等待周期数 |
Go |
控制LSGU是否产生LineSync脉冲。当此寄存器被设置为1时,LSGU会产生一个LineSync脉冲信号,然后把CyclesBetweenPulses传给CyclesRemaining,并开始计数。当CyclesRemaining变为0时,产生另一个LineSync脉冲,并把CyclesBetweenPulses传给CyclesRemaining,同时开始再次计数。当此寄存器被设置为0时,停止计数,不再产生 |
|
LineSync脉冲。 |
CyclesRemaining |
状态寄存器,它包含到产生下一个LineSync信号前的剩余周期数。 |
LineSync脉冲不是直接由LGSU使用。只有当主/从针脚91被设置为主时,才向三态LineSync0行97加入LineSync脉冲信号。因此,只有主打印引擎/控制器产生的LineSync脉冲信号才有效(从打印引擎/控制器产生的脉冲被忽略)。
Memjet接口(MJI)93向Memjet打印头94传送数据,并告知Memjet接口何时开始打印下一行数据。它还用于支持从指定段返回的反馈信号。Memjet打印头95本身负责控制其喷嘴的激发顺序,使用图3中的I2C串行接口36可对激发配置编程。MJI包含一个状态机,该状态机遵从第18.1节中描述的打印头装载顺序。MJI还可以包含预加热循环和清洗循环的功能。每种颜色的点数也是由MJI保存的(见下文)。
MJI可以从两个数据源向打印头装载数据:·全1:这是指所有喷嘴在下一个打印周期中全部激发,它是为预热或清洗循环装载打印头的标准机制。·从LLFU的传送寄存器中的90位输入:这是打印图像的标准方法。在第一次传送中,前48位被送到打印头,在第二次传送中,后42位被送到打印头,后42位的前面带有6个0。当发送完90位后,向LLFU发送1位的“前进”控制脉冲。
MJI知道在一个页面上要打印多少行。当MJI接到“Go”命令时,在开始打印第一行之前(通过向打印头发送一个NPSync脉冲),它等待一个LineSync脉冲。当完成打印行的装载/打印后,在开始打印下一行前,它等待下一个LineSync脉冲信号。当装载/打印完成指定数量的行后,MJI将停止,并忽略以后的LineSync脉冲。因此,MJI在96与LLFU31直接连接(如图3和图4所示),在97与LineSync0连接(由所有同步的芯片共享),并连接外部Memjet打印头95。MJI从LLFU接收90位数据,在这90位中,只有与打印头段数和颜色数相对应的位是有效的。MJI的状态机不考虑哪些位是有效的,哪些位是无效的——它只简单地把这些位传送给打印头。从MJI输出的数据行和控制信号被送到下述的芯片的针脚。
MJI与打印头有若干个连接,包括最多6种颜色,每次向两个段组(最多)传送8个段(最多)。表35列出了这些连接并指明了是向MJI输入还是由MJI输出。这些名称与打印头的针脚连接相对应。
表35.Memjet接口连接
名称 |
针脚号 |
I/O |
描述 |
D1[0-7] |
8 |
0 |
向段0-7的D1移位寄存器的输出 |
D2[0-7] |
8 |
0 |
向段0-7的D1移位寄存器的输出 |
D3[0-7] |
8 |
0 |
向段0-7的D3移位寄存器的输出 |
D4[0-7] |
8 |
0 |
向段0-7的D4移位寄存器的输出 |
D5[0-7] |
8 |
0 |
向段0-7的D5移位寄存器的输出 |
D6[0-7] |
8 |
0 |
向段0-7的D6移位寄存器的输出 |
SClk[1-2] |
2 |
0 |
SClk[N](ShiftRegisterClock)上的一个脉冲把D1[0-7]、D2[0-7]、D3[0-7]、D4[0-7]、D5[0-7]和D6[0-7]的当前值装载到打印头的段组N中。 |
Ten |
1 |
0 |
从移位寄存器向打印头的内部NozzleEnable位并行传输数据 |
CCEn[1-2] |
2 |
0 |
CCEn[N]ANDed上的脉冲与D1[n]中的数据进行“与”操作,启用打印头的段组N中的打印段的感应行 |
PHSense |
1 |
I |
打印头感应(温度、电压、电阻率等等) |
Reset |
1 |
0 |
打印头复位 |
TOTAL |
55 |
|
|
MJI记录从打印头喷出的每种颜色的点的数量。为每种颜色记录的点数是一个32位值,这些值由处理器负责清除。使用32位长度,每个点计数器可以记录17.8英寸×12英寸页面的点数,但是在实际使用中,在每打印一页或半页后都会读取并清除点的计数。处理器使用点计数来刷新QA芯片,从而预测何时墨盒中的墨水将用完。处理器可以从QA芯片获得墨盒的墨水容量的数据。采用对墨滴进行计数的方法可以省略墨水传感器,并能防止缺墨。在每次打印一页后,更新的墨滴计数会被写入到QA芯片中。这样,只有剩余的墨水足够打印下一个页面时,打印头才会打印下一页。这种方法有助于即时更换墨盒,而不会产生只打印出半个页面的情况。
图13所示为颜色N的点计数器的结构。6个点计数器的结构是完全一样的。在98,点计数器从HCU接收颜色N的数据,并把数据传送给15-4行编码器99。编码器99的4行输出被送到一个加法器100中和颜色N点计数器101中,在102,输出一个32位计数。计数器101的数值可以由线路103中的一位值清除。计数器101的装载由104中的一位控制。
处理器与MJI通过一组寄存器通信。寄存器允许处理器为打印设置参数并接收打印过程的反馈。MJI中含有下列寄存器:
表36.Memjet接口寄存器
寄存器名称 |
描述 |
打印参数 |
SegmentsPerXfer |
每次数据传送写入的段数。该值还等于数据传送之间要等待的周期数(在产生下一个步进脉冲前)。每次数据传送发出MaxColors×SegmentsPerXfer个有效位。 |
SegmentGroups |
打印头中的段组数量。此数值等于在向打印头的每个段写入一个点之前要经过的SegmentsPerXfer次数。为了完成向打印头传送一整行数据的任务,MJIT需要执行SegmentsPerXfer 1280次。 |
NumLines |
要执行的装载/打印次数。 |
监视打印(对处理器是只读的) |
Status |
Memjet接口的状态寄存器 |
LinesRemaining |
剩余的打印行数。只有当Go=1时才有效开始值是NumLines,最终减为0。 |
TransfersRemaining |
在打印头装载完当前行数据之前要传送的剩余的SegmentGroups数。开始值是1280,最终减为0。只有当Go=1时才有效。 |
SegGroupsRemaining |
在当前的1点/段的数据传送中剩余的段组数。开始值为SegmentGroups,最终减为0。只有当Go=1时才有效。 |
SenseSegment |
在后续的反馈CCEn脉冲中要放到D1中的8位值。这8位中只能设置1位,它对应8个段(最多)中的某一个段。关于如何确定要感应的段组,请参考SenseSelect |
SetAllNozzles |
如果不是0,那么在LoadDots过程中写入打印头的48位值都是1,这样在后续PrintDots过程中所有喷嘴都打印。在预热和清晰过程中使用此模式。如果为0,那么写入打印头的48位值从LLFU而来。在实际打印中使用此模式。 |
动作 |
Reset |
向此寄存器写入数据会重置MJI,停止任何装载或打印过程,并对所有寄存器清零。此时MJI还向与打印 |
|
头相连的RESET线发送一个脉冲。 |
SenseSelect |
向此寄存器写入数据会清除状态寄存器的FeedbackValid位,后续动作取决于LoadingDots和PrintingDots状态位的值。如果其中一个状态位被重置,那么Feedback位将被清除,并且不会发生其它动作。如果两个状态位同时被清除,那么在CCEn线路上会同时加入脉冲,所有Dn位都被置为0。这将停止所有现有反馈。根据写入SenseSelect寄存器的两个低位值,会向CCEn1或CCEn2发送脉冲,其D1位根据SenseSegment寄存器设置。当测试了感应行后,值被写入PHSense寄存器中,并设置状态寄存器的Feedback位。 |
Go |
向此位写入1会开始LoadDots/PrintDots循环,并开始等待第一个LineSync脉冲。然后打印Num-Lines个行。每接收到一个LineSync脉冲就装载/打印一行。每行数据由SegmentGroups X 48位构成。每打印一行后,LinesRemaining减1,并使用SegmentGroups重新装载TransfersRemaining,然后句打印头发送一个NPSync脉冲。状态寄存器包含打印状态信息。在完成NumLines个行的打印后,装载/打印过程停止,清除Go位,并忽略所有以后的LineSync |
|
脉冲。在最后一个打印循环中,不向打印头装载任何数据。向此位写入0会停止打印过程,但是不清除任何寄存器。 |
ClearCounts |
向此寄存器写入数据会清除Color1DotCount、Color2DotCount、Color3DotCount、Color4DotCount、Color5DotCount和Color6DotCount寄存器(如果分别设置了位0、1、2、3、4、5或6)向此位写入0不产生任何效果。 |
反馈 |
PHSense |
只读值,从最后一次向SenseSegment段发送CCEn脉冲以来打印头提供的反馈信息。只有当设置了状态寄存器的FeedbackValid位时才有效。 |
Color1DotCount |
只读值,向打印头发送的32位color1点。 |
Color2DotCount |
只读值,向打印头发送的32位color2点。 |
Color3DotCount |
只读值,向打印头发送的32位color3点。 |
Color4DotCount |
只读值,向打印头发送的32位color4点。 |
Color5DotCount |
只读值,向打印头发送的32位color5点。 |
Color6DotCount |
只读值,向打印头发送的32位color6点。 |
MJI的状态寄存器是一个16位寄存器,其各位的描述如下:
表37.MJI的状态寄存器
名称 |
位数 |
描述 |
LoadingDots |
1 |
如果设置了此位,那么MJI将装载点,要传送的剩余点数量在TransfersRemaining中给出。如果此位被清除,那么MJI不会装载点。 |
PrintingDots |
1 |
如果设置了此位,那么MJI打印点。如果此位被清除,那么MJI不会打印点 |
FeedbackValid |
1 |
当反馈值Tsense、Vsense、Rsense和Wsense有效时,此位被设置 |
Reserved |
13 |
- |
下列伪代码说明了向打印头装载一个数据行的逻辑。需要注意的是,只有在LineSync脉冲信号到达时才开始装载。这样可以保证LLFU能够为该打印行准备好数据以及向打印头传输第一行的有效性。
Wait for LineSync
For TransfersRemaining=1280 to 0
For I=0 to SegmentGroups
If(SetAllNozzles)
Set all Dn lines to be 1
Else
If(I=0)
Place first 48 bits of LLFU’s 90 bit Transfer
<!-- SIPO <DP n="48"> -->
<dp n="d48"/>
register on 48 Dn lines
Else
Place last 42 bits of LLFU’s 90 bit Transfer register
on 48 Dn lines
EndIf
Pulse SClk
Wait SegmentsPerXfer cycles
Send ADVANCE signal
EndFor
EndFor
只需在MJI中设置适当的寄存器并在打印头的激发脉冲配置文件中进行适当设置,就可执行清洗和预热过程。· SetAllNozzles=1· 把激发脉冲配置文件设置为较短的时间周期可激活预热模式,采用适当的喷墨时间可激活清洗模式。· 把NumLines设置为激发喷嘴的次数· 设置Go位,然后等待打印循环完成后清除Go位。
还必须把LSGU设置为以正确的频率发送LineSync脉冲。上述描述的目的只是说明本发明的较佳实施例,不应构成对本发明的任何限制。本领域的技术人员可以在本发明的特定实例基础上很容易地实现各种变化,但按照本发明进行的任何等价修改或修饰都应属于本发明的范围。