附图的详细说明
1介绍
根据本发明的打印机是一种高性能彩色打印机,其将照片质量的图像复制与杂志质量的文本复制结合在一起。它使用了8”页面宽度的微电机喷墨打印头,其产生每英寸1600点(dpi)的二值CMYK(Cyan(青绿色)、Magenta(品红色)、Yellow(黄色)、black(黑色))。在本说明中,打印头技术称为“Memjet”,而打印机称为“CePrint”。
CePrint构成为原始设备制造(OEM)部件,设计用于主要包含在消费品电子(CE)电子装置中。预计的市场包括电视、VCR、PhotoCD播放器、Hi-Fi系统、Web/因特网终端、计算机显示器和车辆控制台。下面将要详细说明,其特征在于具有一外形低矮的前面板,并通过一推出的底盘使用户能够取放纸和墨。其在室内环境条件下在水平方向操作。
CePrint存在单面型和双面型。单面型每分钟打印30页全色A4或信函纸。双面型每分钟打印60页全色纸(即每分钟30张)。尽管CePrint支持两种纸张规格,有时制造商将其构造成用于特定的纸张尺寸。
1.1操作概述
CePrint用二值复制黑色和连续色调(contone)图像直接复制黑色文本和图形,而用高频振动二值CMYK复制图形。作为实际的用户,CePrint支持800dpi的黑色分辨率,以及每英寸267像素(ppi)的连续色调分辨率。
CePrint被置于CE装置内,并通过较低速的(1.5M字节/秒)连接与CE装置(主机)处理器通信。CePrint依赖于主处理器以将每一页着色(render)为连续色调像素水平和黑点。主机处理器将每个着色页压缩为小于3MB以再分为二,第二次送至打印机。CePrint解压缩并以微电机喷墨(MMM)打印头的速度逐行打印页面。CePrint包含足够的缓冲存储器以用于两个压缩页(6MB),允许其打印一页同时接收下一页,但该缓冲存储器的容量对于单面未压缩页(119MB)仍是不够的。
CePrint的双面型包含两个平行操作的打印头。这些打印头由分开的数据路径馈送,每个这种数据路径复制在单面型CePrint中建立的逻辑。双面型与主机处理器具有相应较快的连接(3MB/秒)。
2产品规格
表1给出了单面和双面型CePrint单元的产品规格汇总。
表1 CePrint规格 |
|
单面型 |
双面型 |
点距 |
1600dpi | |
纸张 |
标准A4/信纸 | |
纸托盘容量 |
150张 | |
打印速度 |
每分钟30页 |
每分钟60页每分钟30页 |
预热时间 |
无 | |
第一打印时间 |
2-6秒 |
后续打印 |
2秒/张 |
彩色模型 |
32-位CMYK处理颜色 |
可打印区域 |
满页(除去极边缘处) |
打印头 |
具有54400个喷嘴的页面宽度MMM |
双打印头 |
打印方法 |
自清洁转印辊,涂覆有氮化钛 |
双转印辊 |
尺寸(高×宽×深) |
40毫米×272毫米×416毫米 |
60毫米×272毫米×416毫米 |
重量 |
3千克(近似值) |
4千克(近似值) |
电源 |
5伏,4安 |
5伏,8安 |
墨盒彩色容量 |
如为15%覆盖率为650页 |
墨盒黑色容量 |
如为15%覆盖率为900页 |
墨盒大小(高×宽×深) |
21毫米×188毫米×38毫米 |
3基于MEMJET的打印
MMM打印头产生1600dpi的二值CMYK。在低扩散度的纸上,每个喷出的墨滴是几乎正圆形的22.5毫米直径的点。很容易产生分隔开的点,从而充分地利用了发散点的高频振动。因为MMM打印头是页面宽度的打印头,并以固定的纸速操作,可以以优良的重合性打印四色平面,从而进行理想的点上加点的打印。因为在彩色面之间最终没有空间的交互作用,所以对每个彩色面使用相同的高频振动矩阵。
页面布局可以包含图像、图形和文本的混合。用随机的发散点高频振动来复制连续色调(contone)图像和图形。当通过眼睛在空间上综合时,与集簇式点(或幅值调制)高频振动不同,发散点(或频率调制)高频振动以几乎达到点分辨率极限的水平复制高空间频率(即图像细节),而同时以全色深度复制低空间频率。仔细地设计随机高频振动矩阵以在图像中排列时避免有害的低频模式。这样其大小一般超过用于支持多个亮度水平(即对257的亮度水平是16×16×8位)所需要的最小尺寸。CePrint使用大小为64×64×3×8位的高频振动容量。该容量在设计高频振动时通过允许点在亮度范围内多次改变状态而不是象在传统的高频振动矩阵中那样只改变一次来提供额外的自由度。
人对于对比度的敏感性的峰值在每个视野度3周的空间频率处,然后成对数形式地下降,在大约40周每度之外按照100的系数减少,而在每度60周之外则变为不可测量。在正常的12英寸的视距(大约300毫米),这可大致转换为在打印页面上每英寸200-300周(cpi),或根据奈奎斯特理论为每英寸400-600个采样。因此在每英寸400像素(ppi)以外的连续色调分辨率用途有限,并且实际上通过高频振动对色彩偏差有影响。
用二值黑点复制黑色文本和图形,并在打印前不被去假频(antialiased,即低通滤波)。因此文本在上述感觉限制之外被过采样,以在由人眼的空间综合中产生更平滑的边缘。文字分辨率达到1200dpi可使文字的棱角更鲜明(当然假定是在低扩散度的纸上)。
4送页结构
4.1页面图像尺寸
CePrint以除去边缘的方式打印A4和信纸。相应的页面图像尺寸相对于在下面将讨论的各种空间分辨率和色彩深度的设置见表2。注意虽然信纸页面要宽一些,但A4页的大小超出了信纸页面的大小。因此页面缓冲器要求是根据A4定的,而行缓冲器要求则是根据信纸定的。
表2页面图像尺寸 |
空间分辨率(像素/英寸) |
颜色深度(位/像素) |
A4a页面缓冲器大小 |
信纸b缓冲器大小 |
1600 |
32 |
948MB |
913MB |
800 |
32 |
237MB |
228MB |
400 |
32 |
59.3MB |
57.1MB |
267 |
32 |
26.4MB |
25.4MB |
1600 |
4 |
119MB |
114MB |
800 |
4 |
29.6MB |
28.5MB |
1600 |
1 |
29.6MB |
28.5MB |
800 |
1 |
7.4MB |
7.1MB |
a210毫米×297毫米,或8.3”×11.7”b8.5”×11” |
4.2约束
在打印页面过程中中断基于MMM的打印机的动作会产生看得出的间断,所以在打印机开始打印前接收整个页面、以消除缓冲器欠载运行的可能性是有利的。此外,如果从主机向打印机的页面传送所需的时间在其打印该页面的时间中占了很大成份,则最好在打印机中提供双页缓冲器,以便在打印一页的同时接收下一页。如果页面的传送时间小于其打印时间的二分之一,则双缓冲可允许CePrint的页面打印速率达到30整页/分钟。
图6显示了用打印机中的双缓冲区可以实现的固定打印速率,假定有二秒的页面着色时间和二秒的页面传送时间。
假定对于打印机来说最大为8MB的存储容量(即单个64MbitDRAM)是经济的,则对打印机中每个页缓冲器来说可获得小于4MB的容量,从而对页面图像的大小要求限制在4MB以内。为了在打印机中编程和使存储器工作,限制为每页图像3MB。
假定打印机与主机处理器只有典型的低速连接,则该连接的速度是1-2MB/秒(即对于并口为2MB/秒,对于USB为1.5MB/秒,对于10Base-T以太网是1MB/秒)。假定为2秒的页传送(即等于打印时间),其对页面图像的大小有2-4MB限制,即,与由页面缓冲器的大小所加的限制相似。
实际上,因为主机处理器和打印机可以靠近连接,因此在它们之间可以容易地实现高速连接。
无论单面型CePrint对主机连接速度的要求是多少,双面型要求的连接速度都是它的两倍。
4.3页面着色和压缩
页面着色(或光栅化处理:rasterization)可以在主处理器和打印机之间以各种方式分离。一些打印机支持完整的页面说明语言(PDL)如Postscript,并包含相对较为复杂的的着色器。另一些打印机仅对着色文字提供特殊的支持,以实现高的文字分辨率。这通常包括对内建的或可下载的字体的支持。在每种情况下,内置的着色器减轻了主机处理器的着色负担,并减少了从主处理器向打印机发送的数据量。但是,这是有代价的。这些打印机要更比原来更复杂一些,并且经常不能提供对主机的图形系统的全面支持,而应用程序必须通过该主机的图形系统来进行构造、着色和打印页面。它们不能尽可能高地开发主机处理器的性能。
CePrint依赖于主机处理器来对页面进行着色,即,将连续色调图像和图形着色至像素级,将黑色文字和图形着色至点级。CePrint仅包含简单的着色引擎,其使连续色调数据高频振动并将其结果与任何前景的二值黑色文字和图形结合。该策略使打印机保持较为简单,并可独立于任何页面说明语言或图形系统。其完全开发了在多媒体CE装置中主机处理器所预期的高性能。该策略的不利是必须从主机处理器向打印机发送潜在的大量数据。因此使用压缩来将页面图象大小减少至3MB,这是为了能够达到固定的30页/分钟打印速率所需要的。
8.3”×11.7”的A4页面具有二值CMYK页图像尺寸,其在1600dpi时占119MBytes(兆字节),而连续色调CMYK页尺寸在400ppi时占59.3MB。
使用JPEG压缩来压缩连续色调数据。尽管JPEG必然会有损耗,对于10∶1或更小的压缩率该损耗通常是可以忽略的。为了达到高质量的小于10∶1压缩比的压缩,以及为了得到整体连续色调达到二值比率,选择267ppi的连续色调分辨率。这产生了25.5MB的连续色调页面尺寸、相应的压缩比为8.5∶1,以适合3MB/页的限制,以及符合连续色调在每一维中1∶6的二值比。
在打印机分辨率(1600dpi)下着色的整面的黑色文字(和/或图形)产生29.6MB的二值图像。因为1600dpi的着色文字将处理负荷压在主机处理器上以得到在质量上的微小提高,所以选择以800dpi格栅化(rasterize)的文字。这产生7.4MB的二值图象,需要小于2.5∶1的无损失压缩比以符合3MB/页限度范围。这可利用与Group4传真相似的二维二值压缩方案来实现。
只要页面的图像和文字区域是不重叠的,二者的任何组合都在3MB的限制范围内。如果文字在背景图像的上部,则最坏的情况是被压缩页面像尺寸达到6MB(取决于实际文字的压缩比)。这适合于打印机的页面缓冲存储器,但使打印机不能进行页面的双缓存,从而将打印机的页面速率减小了三分之二,即减小至10页/分钟。
4.4页面扩展和打印
如上所述,主机处理器将连续色调图像和图形着色至像素级,将黑色文字和图形着色至点级。这些都通过不同的装置压缩并一起发送给打印机。
打印机包含两个3MB页面缓冲器-一个用于从主机接收的页面,一个用于被打印的页面。打印机将被压缩的页面扩展为被打印的状态。该扩展包括:将267ppi连续色调CMYK图像数据解压缩、将得到的连续色调像素调成中间色,达到1600dpi二值CMYK点、将800dpi二值黑色文字数据解压缩、和将所得到的二值黑色文字点合成到相应的二值CMYK图像点上。
图7显示了从申请打印到打印页面的概念上的流程图。
5打印机硬件
CePrint被设想为设计成主要用于包含在消费品电子(CE)装置中的一OEM部件。预计的市场包括电视、VCR、PhotoCD播放器、Hi-Fi系统、Web/因特网终端、计算机显示器和车辆控制台。其特征在于具有一外形低矮的前面板,并通过一推出的底盘使用户能够取放纸和墨。其在室内环境条件下在水平方向操作。
因为页面宽度MMM打印头的简单性,CePrint包含一超紧密打印机构,其产品的总体高度对于单面型为40毫米,对于双面型为60毫米。
OEM产品的本质是在风格上应当简单,并且尺寸要最小以放入主产品中。CePrint的风格是能够装入所有目标市场产品中并且具有40毫米高×272毫米宽×416毫米深的最小整体尺寸。该产品唯一的装饰性部分是前表面和前面的托盘塑料。如果制造商想将CePrint与某种设备相结合,还可以对这些装饰部分进行重新设计。
两种型号的CePrint或打印机的正视图分别示于图1和图2,并用参考数字10统一标识。要说明的是,在机械方面,两种型号是一样的,只是双面型在高度上要大一些,以容纳第二打印引擎而不是压辊。这将在下面更详细地得到说明。单面型CePrint的侧面和平面视图分别示于图3和图4。双面型CePrint的侧面视图示于图5。
CePrint10是具有可取下的墨盒和MMM打印头机构的带电机的A4/信纸托盘。其包括前面板12,安装有纸推出按钮14、一电源LED16、一缺墨LED18和一缺纸LED20。纸托盘22可滑动地相对于前面板12设置。当纸托盘22在其“本位”位置时,在前面板12和纸托盘22之间限定纸输出口24。
前面板12的前面有一外壳26,其包含有打印机10的工作部分。如图中5所示,外壳26在双面型的情况下在28处向着前面板12(图1和图2)做成台阶状以容纳第二打印引擎。外壳26盖住一金属底盘30(图8)、仪表板、(模铸的)纸托盘22、墨盒32(图10)、三个电机、一柔性的PCB 34(图8A)、一刚性的PCB 36(图8)和各种模制件和较小的部件,以实现低成本高容量的产品。
打印机10操作简单,只需要用户按前面板LED 20或18的分别指示补充纸或墨即可。纸处理机构与当前打印机应用相似,并且因此可以认为是可靠的。在发生夹纸的极少数情况下,推纸托盘的动作使用户可以处理这类问题。如果盘22在推入过程中卡住,这也会被检测到,并且盘22被再推出。这使用户在操作盘22时只需要将其推到关闭状态即可,从而非常省力,并且保护该单元防止在盘被锁死在外面位置时被损坏。它还可防止儿童在关闭时将手指伸入盘22中。通过将新墨盒插入到纸托盘22(图8)中并将其用凸轮锁定杠杆机构固定来换墨。
5.1概览
CePrint的概览示于图8到图10。如图9所示,底盘30包括基座金属架38,其上的纸托盘22的前辊轮40是可滑动的。支架42装有电机44、46和48以及齿轮50和52,用于将纸托盘22推出和驱动拾纸辊轮54。
与支架42和基座金属架38相接的是两个导轨56,其使得模铸的纸托盘22及其后辊轮58向前滑动。如上所述,盘22还座在前辊轮40上,并且这样提供一种强有力的、低磨擦和稳定的推出和收回方法。柔性的PCB 34(图8A)从主PCB 36经电机44、46和48运动到接触模制件60和光管路区62。如果盘22在外部位置时被推动,柔性的PCB34上的感光器通过检测齿轮64中的孔(图9)而使盘推出电机46与推出按钮14无关地将盘22撤回。类似地,如果在盘22撤回过程中有任何阻碍,则盘22被推出。
接触模制件60有一泡沫垫66,将柔性的PCB 34固定在其上,并且接触模制件60在打印过程中向打印头和总线提供数据和电源接触。
转印辊68(图11)具有两个端帽69(图8A),以低摩擦承载组件70。端帽69之一具有内部齿轮作用在小齿82上(图14),小齿72将电源通过减速齿轮74传递到蜗杆驱动件上。通过另一齿轮进一步减速到电机蜗杆驱动件76(安装于转印辊68内步进电机124的输出轴上)。该用于装在转印辊68内的电机驱动组件的方案为将来的设计节省了空间,并安装在与墨连接器模制件80、82连接的小底盘78(图8A)上。
墨连接器84具有四个销86,并带有弹射器板88和与墨盒32相接的弹簧90(图10)。墨盒32通过凸轮杠杆和弹簧92来取放(图8)。墨经过模制的通道进入与打印头墨盒端帽96相接的柔性四通道软管连接器94。打印头墨盒的另一端在端帽上具有不同的柔性密封连接器98(图8),以允许墨在安装期间通过墨盒被抽出,并在密封环境下有效地对单元和墨连接器充墨。打印头和墨连接器组件直接安装在纸托盘22中。
纸托盘22具有几个标准的纸张处理部件,即带有低摩擦性垫片102的金属基座底盘100(图8),其由两个压缩弹簧104和两个金属的纸导向件106弹性支撑,纸导向件106的臂108被铆钉固定。纸张通过弹簧钢夹110与纸托盘22的一侧对齐。托盘22通常构成为采用A4的纸张,但通过重新将纸导向件106之一定位并将一板裁剪装入纸托盘22来提供一后止动件,就可以装入信纸。纸托盘22可以容纳160张纸。
对于加纸的标准做法是,将金属基座底盘100向下压并用托盘锁定模制件112和返回弹簧114锁定。当纸张被加入并且托盘22退回时,托盘锁定模制件112通过击打基座金属工件38(图9)中的金属返回件116而被解锁。
打印机10现在准备打印。当被驱动时,拾纸辊54被小驱动齿轮118驱动,小驱动齿轮118与另一驱动齿轮50和正常电机44啮合。辊子54被两个加热打桩的固定器模制件120(图8)定位于基座金属工件38(图9)。在拾纸辊54的端部上的小模制件与柔性PCB 34上的传感器共同作用以精确地将拾纸辊54定位在停放的位置,以便纸张和托盘22可以在弹出时被撤回而不用去接触它。这种精确的定位还允许辊子54以固定的转数将纸张送至转印辊68(图10)。由于转印辊68以相似的速度运动,取纸应当没有问题。安装在外壳26内的感光器122找到每张纸的开始处并与一传动电机124相配合(图14),从而如果例如纸张在任何异常操作过程中向辊子前方移动,也没有问题。
主PCB 36通过标准PCB支架126安装在基座金属工件38上,并与数据连接器128和DC连接器130配合。
前面板12被用锁扣小件(snap details)安装在基座金属工件38上,并且顶部金属盖132通过四个装配件134用RFI/EMI集成完成了整个产品。
5.2打印头组件和图像传送机构
图11中更详细地示出了打印引擎,并且用参考数字140来标示。MMM打印头组件用参考数字142标示。这表示在产品如CePrint 10中采用MMM打印头143与墨盒32相结合的四个可能的方式之一:
·永久性打印头,可更换墨盒(如图11所示)
·可分别更换的打印头盒和墨盒
·可再充填的组合打印头和墨盒
·可废弃的组合打印头和墨盒
MMM打印头143在涂覆氮化钛(TiN)的转印辊68上打印,转印辊68在逆时针方向上转动以将图像转印到纸张144上。在单面型的情况下,纸张144被一覆盖有弹性橡胶的压辊145压向转印辊68。如图13所示,在双面型的情况下,纸张144在转印辊68之一的作用下被压向另一转印辊68。在将图像转印到纸张144上之后,转印辊68继续通过一清洁用海绵体146并最终通过一橡皮擦除器148。海绵体146和擦除器148形成了用于清洁转印辊68表面的清洁站。
当操作时,打印头组件142被螺线管150推离转印辊68,如图12B所示。当未操作时,打印头组件142如图12A所示停靠在转印辊68上。打印头的整个弹性体密封件152将打印头组件142密封并防止MMM打印头143干涸。
在双面型的CePrint 10中,有双打印引擎140,每个具有其相关的打印头组件142和转印辊68,双打印引擎140相对着安装,如图13所示。下部打印引擎140被固定而上部打印引擎140转动,并被弹力压到纸件144上。如前所述,上部转印辊68取代了单面型中压力辊145的位置。
图15和16更详细地显示了墨盒32、打印头组件142和转印辊68的关系。墨盒具有四个墨池154、156、158和160,分别用于青绿色、品红色、黄色和黑色的墨。
墨池154-160中每一个与打印头组件142中相应的墨池164-170流通。这些墨池通过滤墨器174轮流向MMM打印头芯片143(图16)供墨。应当说明图16中弹性帽式密封152被设置在打印头芯片143的两侧,以当打印头组件142停靠在转印辊68上时帮助密封。
将电源通过总线排176提供给螺线管。
6.打印机控制协议
这一节将说明在主机和CePrint 10之间使用的打印机控制协议。它包括了控制和状态处理以及实际页面的说明。
6.1控制和状态
打印机控制协议定义了主机处理器和打印机10之间交换消息的格式和意义。控制协议的定义与在主机处理器和打印机10之间的传输协议无关,因为传输协议取决于精确的连接特征。
每个消息由16位消息代码构成,后接消息专用数据,其长度可以是固定的,或是可变的。
包含在消息中的所有的整数被以大endian字节顺序编码。
表3定义了由主机处理器向打印机10发送的命令消息。
表3打印机命令消息 |
命令消息 |
消息代码 |
说明 |
reset printer(复位打印机) |
1 |
将打印机复位到闲置状态(即待机或不打印状态) |
get printer status(得到打印机状态) |
2 |
得到当前的打印机状态 |
start document(开始文档) |
3 |
开始新的文档 |
start page(开始页面) |
4 |
开始新的输出页的说明 |
page band(页面区段) |
5 |
说明一段(band)当前输出页 |
end page(结束页) |
6 |
结束当前输出页的说明 |
end document(结束文档) |
7 |
结束当前文档 |
reset printer命令可以用于复位打印机以清除错误状态,并退出打印。
start document命令用于指示新文档的开始。此举复位了打印机页面计数,该计数用于双面型中以识别奇数页和偶数页。end document命令只是用于指示文档的结尾。
输出页面的说明包括页面首标,其说明了页的尺寸和分辨率,后面跟的是一个或多个页面段,其说明了实际页面内容。页面首标在startpage命令中被发送至打印机。在page band命令中将每个页面段发送至打印机。最后一个页面段后面跟着end page命令。该页面说明在表4.2中详细说明。
表4定义了由打印机发送至主机处理器的响应消息。
表4打印机响应消息 |
响应消息 |
消息代码 |
说明 |
printer status(打印机状态) |
8 |
包含当前打印机状态(如表7中定义的)。 |
page error(页面错误) |
9 |
包含最近的页面错误代码(如表8中所定义的)。 |
printer status消息通常是响应于get printer status命令而发送的。但是,在主机处理器与打印机之间连接的本质使打印机向主机处理器发送未被请求的状态消息。未被请求的状态消息允许定时向主机处理器报告打印机的异常并由此向用户报告,而不用要求主机处理器经常去查询打印机。
page error消息是响应于每个start page、page band、和end page命令而发送的。
表5定义了包含在打印机状态消息中的16位打印机状态。
表5打印机状态格式 |
字段 |
位 |
说明 |
ready(准备) |
0 |
打印机准备接收一页 |
printing(打印) |
1 |
打印机在打印 |
error(错误) |
2 |
打印机处于错误状态 |
Paper tray missing(纸托盘丢失) |
3 |
纸托盘缺失 |
Paper tray empty(纸托盘空) |
4 |
纸托盘空 |
ink cartridge missing(墨盒丢失) |
5 |
墨盒缺失 |
ink cartridge empty(墨盒空) |
6 |
墨盒空 |
ink cartridge error(墨盒有错误) |
7 |
墨盒处于错误状态 |
(保留) |
8-15 |
保留以备将来使用 |
表6定义了页面错误代码,其可以在page error消息中被返回。
表6页面错误代码 |
错误代码 |
值 |
说明 |
no error(无错误) |
0 |
无错误 |
bad signature(特征标记不对) |
1 |
未能识别特征标记 |
bad version(型号不对) |
2 |
型号不支持 |
bad parameter(参数不对) |
3 |
参数不正确 |
6.2页面说明
CePrint 10以全点(full dot)分辨率(1600dpi)复制黑色,但用半色调以较低的分辨率复制连续色调的颜色。页面说明因此被分为黑色层和连续色调层。黑色层被定义为连续色调层上的复合层。
黑色层包括含有对每个像素的1位不透明的位图。该黑色层matte具有打印机点分辨率的整数倍的分辨率。可支持的最高分辨率是1600dpi,即打印机的全点分辨率。
连续色调层包括含有对每个像素的32位CMYK颜色的位图,该连续色调层具有打印机点分辨率的整数倍的分辨率。可支持的最高分辨率是267dpi,即打印机的全点分辨率的六分之一。
连续色调分辨率典型地还是黑色分辨率的整数倍,以简化在打印机驱动器中的计算。但这并非是必需的。
黑色层和连续色调层都是压缩形式的以通过低速连接向打印机发送。
6.2.1页面结构
CePrint用8.5”打印头打印除整个边缘以外的部分。其没有加任何边距,因此具有与纸张(A4或信纸)大小几乎相同的打印区域。
目标页尺寸受到可打印页面区的限制,只要在页面说明中规定清楚的(目标)左边距和顶部边距即可。
6.2.2页面说明格式
除了不明确地与可打印页面区域相关地定义之外,每个页面说明是完整的和自我包含的。没有数据与页面说明分开地发送到该页面说明所指的打印机上。
页面说明包括页面首标,其说明了页面的尺寸和分辨率,其后跟一个或多个说明实际页面内容的页面段。
表7显示了页面首标的格式
表7页面首标格式 |
字段 |
格式 |
说明 |
Signature(特征标记) |
16位整型 |
页面首标格式特征标记 |
Version(型号) |
16位整型 |
页面首标格式型号 |
Structure size(结构尺寸) |
16位整型 |
页面首标的大小 |
target resolution(dpi)(目标分辨率) |
16位整型 |
目标页的分辨率。对于CePrint总是1600 |
target page width(目标页的宽度) |
16位整型 |
目标页的宽度,以点为单位 |
target page height(目标页的高度) |
16位整型 |
目标页的高度,以点为单位 |
target leftmargin(目标左边距) |
16位整型 |
目标左边距的宽度,以点为单位 |
target top margin(目标顶边距) |
16位整型 |
目标顶边距的宽度,以点为单位 |
black scale factor(黑色比例系数) |
16位整型 |
从黑色分辨率到目标分辨率的比例系数(必须大于等于2) |
black page width(黑色页面宽度) |
16位整型 |
黑色页面宽度,以黑色像素为单位 |
black page height(黑色页面高度) |
16位整型 |
黑色页面高度,以黑色像素为单位 |
contone scale factor(连续色调比例系数) |
16位整型 |
从连续色调分辨率到目标分辨率的比例系数(必须大于等于6) |
contone page width(连续色调页面宽度) |
16位整型 |
连续色调页面的宽度,以连续色调像素为单位 |
contone page height(连续色调页面高度) |
16位整型 |
连续色调页面的高度,以连续色调像素为单位 |
页面首标包含特征标记和型号,其使得打印机能够识别页面首标格式。如果特征标记和/或型号缺失或与打印机不兼容,则打印机可以拒绝该页。
页面首标定义了目标页的分辨率和大小。黑色和连续色调层根据需要被剪裁到目标页上。只要黑色或连续色调的比例系数不是目标页宽度或高度的系数,就会发生这种操作。
目标左边距和顶边距定义了在可打印页区域内目标页的定位。
黑色层参数定义了黑色层的像素尺寸,及其对于目标分辨率的整数比例系数。
连续色调层参数定义了连续色调层的像素尺寸,及其对于目标分辨率的整数比例系数。
表8显示了页面段首标的格式。
表8页面段首标格式 |
字段 |
格式 |
说明 |
signature(特征标记) |
16位整型 |
页面段首标格式特征标记 |
version(型号) |
16位整型 |
页面段首标格式型号 |
structure size(结构尺寸) |
16位整型 |
页面段首标的大小 |
black band height(黑色段高度) |
16位整型 |
黑色段高度,以黑色像素为单位 |
black band data size(黑色段数据尺寸) |
32位整型 |
黑色段数据尺寸,以字节为单位 |
contone band height(连续色调段高度) |
16位整型 |
连续色调段的高度,以连续色调像素为单位 |
contone band data size(连续色调段数据尺寸) |
32位整型 |
连续色调段的数据尺寸,以字节为单位 |
黑色层参数定义了黑色段高度,以及其压缩的段数据的大小。可变尺寸黑色段数据跟在页面段首标固定尺寸部分后面。
连续色调层参数定义了连续色调段的高度,以及其压缩的页数据的大小。可变尺寸连续色调段数据跟着可变尺寸黑色段数据后面。
表9显示了跟在页面段首标后面的可变尺寸压缩段数据的格式。
表9页面段数据格式 |
字段 |
格式 |
说明 |
black band data(黑色段数据) |
EDRL字节流 |
压缩的二值黑色段数据。 |
contone band data(连续色调段数据) |
JPEG字节流 |
压缩的连续色调CMYK段数据 |
可变尺寸黑色段数据和可变尺寸连续色调段数据都与8字节边界对齐。所要求的填充数的数量包括在页面段首标结构的固定尺寸部分和可变尺寸黑色段数据的尺寸中。
整个页面说明具有小于3MB的目标大小,根据打印机中的页面缓冲存储器情况,最高可达到6MB。
下面的部分将说明压缩黑色层和压缩连续色调层的格式。
6.2.3二值黑色层压缩
6.2.3.1 Group 3和Group 4传真压缩
Group 3传真压缩算法将二值数据无损失地压缩以通过缓慢和有噪声的电话线路进行传输。二值数据代表在白底上被光栅化的黑色文字和图形。并且针对这类图像调节算法(显然不对例如半色调二值图像进行调节)。1D Group 3算法对每个扫描行进行游程编码,然后将所得到的游程进行Huffman编码。范围在0到63中的游程用终止(terminating)码进行编码,范围在64到2623的游程用制作(make-up)码来编码,每个码代表64的倍数,后面跟着终止码。超过2623的游程被用多个后跟终止码的制作码来编码。Huffman表是固定的,但对于黑色和白色游程(除了普通的1728以上的制作码外)要分别进行调节。在可能的情况下,2D Group 3算法将扫描行作为一组短的边缘增量(delta)(0,±1,±2,±3),参考先前的扫描行来编码。数据符号被熵编码(从而使零增量的符号只有一位长)。在不能被增量编码的2D编码的行内的边缘被进行游程编码,并由一个前缀来标识。1D和2D编码的行使用不同的标记。1D编码行以规则的间隔产生,不管实际需要与否,以保证解码器能够在图像变差为最小的情况下从行噪声中恢复。2D Group 3达到6∶1的压缩比。
Group 4传真算法将二值数据无损失地压缩以通过无差错通信线路(即真正无差错的线路、或是在低层协议层执行纠错的线路)进行传输。Group 4算法是基于2D Group 3算法的,但由于假定传输是无差错的,所以进行了实质性的修改,不再有规律地产生1D编码行作为错误恢复的辅助,Group 4对于CCITT测试图像集实现了从20∶1到60∶1的压缩比。
Group 4压缩算法的设计目标和性能使其适合作为用于二值黑色层的压缩算法。但是其Huffman表要调节到较低扫描分辨率(100-400dpi),并且其对超过2623的游程进行编码。在800dpi,最大游程目前是6400。尽管Group 4解码器核心可能对打印机控制芯片是可用的(第7节),它可能不会对超过在400dpi传真应用中所正常遇到的游程进行处理,因此需要修改。
因为Group 4的大多数益处来自于增量编码,因此仅基于增量编码的更为简单的算法可能就能够满足需要。下面将对此详细说明。
6.2.3.2二值边缘增量和游程(EDRL)压缩格式
边缘增量(edge delta)和游程(runlength)(EDRL)压缩格式是大致基于Group 4压缩格式及其前身的。
EDRL使用三种码元,适合采用熵编码。它们是:create edge、killedge和edge delta。每一行都参考其前身进行编码。第一行的前身被定义为一行白色。每一行被定义为从白色开始。如果一行实际从黑色开始(这种情况较少见),则必须定义一偏移为零的黑色边缘。每一行必须在其左端(即在其页面宽度偏移量处)定义一边缘。
如果在最大增量范围内存在具有相同的感觉(白到黑或黑到白)的边缘,则一边缘可参考在前一行中的边缘来编码。这使用了边缘增量代码之一。增量越短和越相似,则其代码就越短。选择最大增量范围(±2)以匹配典型字形边缘的增量分布。该分布几乎与点尺寸无关。典型的例子示于表10。
表10对于10点倍数在800dpi处的边缘增量分布 |
|增量| |
概率 |
0 |
65% |
1 |
23% |
2 |
7% |
≥3 |
5% |
边缘还可以用从同一行的前一边缘扫描的宽度来编码。此举对于短游程(7位)和长游程(13位)使用create edge(创建边缘)代码之一。为了简化,并且与Group 4不同的是,游程未使用熵编码。为了使边缘delta与前一行中的边缘大致同步,当通过当前行时,将先前行中的每个未使用的边缘“除掉”。这使用kill edge(除掉边缘)代码。End-of-page代码信号对于解码器来说表示页的结束。
注意特别选择了13位的游程以支持800dpi的A4/信纸页面。可以支持长的游程而不会严重影响压缩特性。例如,如果支持1600dpi压缩,则游程应当至少分别为8位和14位。通用的选择可以是8位和16位,从而支持直到40”宽度的1600dpi的页面。
全套的代码在表11中定义。注意那里没有end-of-line代码。解码器使用page width(页面宽度)来检测行的结束。代码长度按照代码发生的相对概率来排序。
表11 EDRL代码字 |
代码 |
编码 |
后缀 |
说明 |
△0 |
1 |
- |
不移动相应的边 |
△+1 |
010 |
- |
移动相应的边+1 |
△-1 |
011 |
- |
移动相应的边-1 |
△+2 |
00010 |
- |
移动相应的边+2 |
△-2 |
00011 |
- |
移动相应的边-2 |
Kill edge(除去边缘) |
0010 |
- |
除去相应边缘 |
Create near edge(创建近边缘) |
0011 |
7比特RL |
从短游程(RL)建立边缘 |
Create far edge(创建远边缘) |
00001 |
13比特RL |
从长游程(RL)建立边缘 |
End of page(页面结束EOP) |
000001 |
- |
页面结束标记 |
图17显示了简单的编码例子。注意常见的全白行跟着另一全白行情况用单比特(△0)编码,而全黑行跟着另一全黑行的常见情况用双比特(△0,△0)编码。
注意前面说明了压缩格式,而不是压缩算法本身。对同样的图像可以产生多种等效的编码,一些编码比另一些更紧凑。例如,纯游程编码符合压缩格式。压缩算法的目标是找出对给定图像的良好(即使不是最好的)的编码。
下面是用于参考一行的前身产生其EDRL编码的简单算法。
#define SHORT_RUN_PRECISION7 //短游程的精度
#define LONG_RUN_PRECISIONl3 //长游程的精度
EDRL_CompressLine
(
Bvte prevLine[], //先前的(参考)二值行
Byte currLine[], //当前(编码)二值行
int lineLen, //行长度
BITSTREAM s //输出(压缩的)比特流
)
int prevEdge=0 //在先前行中的当前边缘偏移量
int currEdge=0 //在当前行中的当前边缘偏移量
int codeEdge=currEdge //最近被编码(输出)的边缘
int prevColor=0 //在先前行中的当前颜色(0=白色)
int currColor=0 //当前行中的当前颜色
int prevRun //在先前行中的当前游程
int currRun //在当前行中的当前游程
bool bUpdatePrevEdge=true//使第一边缘更新
bool bUpdateCurrEdge=true//使第二边缘更新
while(codeEdge<lineLen)
//可能更新先前行中的当前边缘
if(bUpdatePrevEdge)
<dp n="d32"/>
if(prevEdge<lineLen)
prevRun=GetRun(prevLine,prevEdge,lineLen,prevColor)
else
prevRun=0
prevEdge+=prevRun
prevColor=!prevColor
bUpdatePrevEdge=false
//可能更新当前行中的当前页
if(bUpdateCurrEdge)
if(currEdge<lineLen)
currRun=GetRun(currLine,currEdge,lineLen,currColor)
else
currRun=0
currEdge+=currRun
currColor=!currColor
bUpdateCurrEdge=false
//只要有可能、即当边缘检测到匹配并且增量足够小时,即输出增量
if(prevColor==currColor)
delta=currEdge-prevEdge
if(abs(delta)<=MAX_DELTA)
PutCode(s,EDGE-DELTA0+delta)
codedEdge=currEdge
bUpdatePrevEdge=true
bUpdateCurrEdge=true
continue
//除去先前行中不匹配的边缘
<dp n="d33"/>
if(prevEdge<=currEdge)
PutCode(s,KILL_EDGE)
bUpdatePrevEdge=true
//建立当前行中不匹配的边缘
if(currEdge<=prevEdge)
PutCode(s,CREATE_EDGE)
if(currRun<128)
PutCode(s,CREATE_NEAR_EDGE)
PutBits(currRun,SHORT_RUN_PRECISION)
else
PutCode(s,CREATE_FAR_EDGE)
PutBits(currRun,LONG-RUN-PRECISION)
eodedEdge=currEdge
bUpdateCurrEdge=true
注意该算法无视行之间实际的边缘连续性,并且实际上会在两行之间匹配“错误”的边缘。所幸的是压缩格式与此无关,因为它正确地解码,并且对于一个“错误”的匹配很难对压缩比产生有害的影响。
为了完整的目的,下面将给出相应的解压缩算法。其形成了打印机控制器芯片中EDRL扩展器单元的核心(第7节)。
EDRL_DecompressLine
(
BITTSTREAM s, //输入(压缩的)比特流
Byte prevLine[], //先前的(参考)二值行
Byte currLine[], //当前(编码)二值行
intlineLen //行长度
)
<dp n="d34"/>
int prevEdge=0 //在先前行中的当前边缘偏移量
int currEdge=0 //在当前行中的当前边缘偏移量
int prevColor=0 //在先前行中的当前颜色(0=白色)
int currColor=0 //当前行中的当前颜色
while(currEdge<lineLen)
code=GetCode(s)
switch(code)
case
case EDGE_DELTA_MINUS2:
case EDGE_DELTA_MINUS1:
case EDGE_DELTA_0:
case EDGE_DELTA_PLUS1:
case EDGE_DELTA_PLUS2:
//从增量创建边缘
int delta=code-EDGE_DELTA_0
int run=prevEdge+delta-currEdge
FillBitRun(currLine,currEdge,currColor,run)
currEdge+=run
currColor=!currColor
prevEdge+=GetRun(prevLine,preEdge,lineLen,prevColor)
prevColor=!prevColor
case KILL_EDGE:
//放弃未使用的参考边缘
prevEdge+=GetRun(prevLine,preEdge,lineLen,prevColor)
prevColor=!prevColor
case CREATE_NEAR_EDGE:
case CFEATE_FAR_EDGE:
//清楚地创建边缘
int run
if(code==CREATE_NEAR_EDGE:)
<dp n="d35"/>
run=GetBits(s,SHORT_RUN_PRECISION)
else
run=GetBits(s,LONG_RUN_PRECISION)
FillBitRun(currLine,currEdge,currColor,run)
currColor=!currColor
currEdge+=run
6.2.3.3 EDRL压缩性能
表12显示了Group 4和EDRL对CCITT测试文档的压缩性能,这些测试文档用于选择Group 4算法。每个文档代表了在400dpi时的单页扫描。Group 4的优越性能是由于其熵编码的游程,其被调节至400dpi特性。
表12 Group 4和EDRL对400dpi标准CCITT测试文档的压缩性能 |
CCITT文档编号 |
Group 4压缩比 |
EDRL压缩比 |
1 |
29.1 |
21.6 |
2 |
49.9 |
41.3 |
3 |
17.9 |
14.1 |
4 |
7.3 |
5.5 |
5 |
15.8 |
12.4 |
6 |
31.0 |
25.5 |
7 |
7.4 |
5.3 |
8 |
26.7 |
23.4 |
杂志文字在用10点尺寸的serif(如Times)的字样中是是典型的字样集。在这种尺寸下A4/信纸页面可具有14000个字符,而典型的杂志页只有大约7000个字符。文字在点尺寸小于5时是很少的字符集。在800dpi时,文字在小于2的点尺寸时不能使用标准的字样被有效地着色。表13示意性地说明了各种点尺寸的可辨认的情况。
表13不同点尺寸的文字 |
点尺寸 |
示范文字(以Times字体形式) |
2 |
The quick brown fox jumps over the lazy dog |
3 |
The quick brown fox jumps over the lazy dog |
4 |
The quick brown fox jumps over the lazy dog |
5 |
The quick brown fox jumps over the lazy dog |
6 |
The quick brown fox jumps over the lazy dog |
7 |
The quick brown fox jumps over the lazy dog |
8 |
The quick brown fox jumps over the lazy dog |
9 |
The quick brown fox jumps over the lazy dog |
10 |
The quick brown fox jumps over the lazy dog |
表14显示了Group 4和EDRL对于以800dpi着色的各种点尺寸的文字页的压缩特性。注意EDRL对于点尺寸为3的文字字符集的整个页面达到了所需要的2.5的压缩比。字符在测试页的分布是基于英语统计的。
表14 Group 4和EDRL对800dpi文字的压缩性能 |
点尺寸 |
字符/A4页 |
Group 4压缩比 |
EDRL压缩比 |
2 |
340,000 |
2.3 |
1.7 |
3 |
170,000 |
3.2 |
2.5 |
4 |
86,000 |
4.7 |
3.8 |
5 |
59,000 |
5.5 |
4.9 |
6 |
41,000 |
6.5 |
6.1 |
7 |
28,000 |
7.7 |
7.4 |
8 |
21,000 |
9.1 |
9.0 |
9 |
17,000 |
10.2 |
10.4 |
10 |
14,000 |
10.9 |
11.3 |
11 |
12,000 |
11.5 |
12.4 |
12 |
8,900 |
13.5 |
14.8 |
13 |
8,200 |
13.5 |
15.0 |
14 |
7,000 |
14.6 |
16.6 |
15 |
5,800 |
16.1 |
18.5 |
20 |
3,400 |
19.8 |
23.9 |
对于点尺寸为9或更大的情况,EDRL执行Group 4略有出入,这只是因为Group 4的游程代码被调节为400dpi。
这些压缩结果导致了这样的观点,即熵编码的游程对于压缩的贡献远小于2D编码,除非数据的垂直相关性很差,例如在很小字符中的情形那样。
6.2.4连续色调层压缩
6.2.4.1 JPEG压缩
JPEG压缩算法以规定的质量等级有损失地压缩连续色调的图像。其在压缩比低于5∶1时会带来感觉不到的图像质量变差,在压缩比低于10∶1时会带来可忽略的图像质量变差。
JPEG一般首先将图像变换到色彩空间,将亮度和色度分为分立的色彩通道。这使得色度通道被再次采样而不会有相当的损失,这是因为人的视觉系统对于亮度的敏感性比对色度的要强。在此第一步骤之后,每色彩通道被分别压缩。
图像被分为8×8像素块。每个块然后通过离散余弦变换(DCT)被变换到频率域。该变换具有将图像能量集中在较低频系数的效果,这使得较高频系数可以被更粗地量化。这种量化是JPEG中压缩的主要来源。通过将系数按频率排序实现进一步的压缩,以使相邻零系数的可能性最大,从而游程编码的行程有多个零。最后,游程和非零频率系数被熵编码。解压缩是压缩的逆过程。
6.2.4.2 CMYK连续色调JPEG压缩格式
CMYK连续色调层被压缩为交织的彩色JPEG字节流。该交织是在打印机中的空间有效(space-efficient)解压缩所需要的,但是可能会限制解码器为两组Huffman表而不是四组(即每个色彩通道一组)。如果亮度/色度被分离则亮度通道可以共享一组表,而色度通道可以共享另一组表。
如果亮度/色度分离是需要的,不管是为了表共享还是为了色度再采样,则CMY被转换为YcrCb,而Cr和Cb被适时地再采样。K作为亮度通道并且不被再采样。
JPEG字节流是完整的,并且是自包含的。其包含所有对于解压缩所需要的数据,包括量化和Huffman表。
7打印机控制器
7.1打印机控制器结构
打印机控制器178(图18)包括CePrint中央处理器(CCP)芯片180,一64兆位的RDRAM 182,以及一主QA芯片184。
CCP 180包含通用处理器181和一组由处理器通过处理器总线186控制的专用功能单元。只有三个功能单元是非标准的:一EDRL扩展器188,一半色调/复合器190,以及一控制MMM打印头143的打印头接口192。
在处理器181中运行的软件将各种功能单元进行协调,以接收、扩展和打印页面。这将在下一节中说明。
CCP 180的各种功能单元将在后续部分中说明。
7.2页面扩展和打印
页面扩展和打印如下所述进行。从主机经过主机接口194收到页面说明,将其储存在主存储器182中。6MB的主存储器182专用于页面储存。这样可以保存两个页面,每个页面不超过3MB,或保存一个不超过6MB的页面。如果主机生成不超过3MB的页面,则打印机以流水线方式操作-即其打印一页同时接收下一页。如果主机生成超过3MB的页面,则打印机以单页方式操作-即其接收每一页并打印该页,然后接收下一页。如果主机生成超过6MB的页面,则打印机将予以拒绝。实际上打印机驱动程序会防止这种情况的发生。
一个页面包括两个部分:二值黑色层和连续色调层。它们被以不同的格式压缩。二值黑色层是以EDRL格式,而连续色调层则是以JPEG格式。第一阶段的页面扩展包括并行地对两层进行解压缩。二值的层用EDRL扩展器单元188进行解压缩,用JPEG解码器196对连续色调层进行解压缩。
第二阶段的页面扩展包括将连续色调CMYK数据半色调处理为二值CMYK,然后将二值黑色层复合到二值CMYK层上。半色调处理和复合是由半色调器/复合器190来进行的。
最后,复合二值CMYK图像通过控制着MMM打印头143的打印头接口单元192打印。
因为MMM打印头143以高速打印,纸张144必须以固定的速度通过打印头143。如果纸件144由于数据不能足够快地送至打印头143而被停止,则将会发生可以看出的打印不规则性。因此重要的是按照所要求的速率将二值CMYK数据传送至打印头接口192。
充分扩展的1600dpi二值CMYK页具有119MB的图像尺寸。
因为在打印机存储器中储存扩展页是不实际的,每个页在打印过程中被实时地扩展。这样页面扩展和打印的各阶段被流水线化。页面扩展和打印数据流如表15所示。从主存储器通过182MB/秒的接口往来的集合数据量最好在当前技术如Rambus的承受能力内。
表15页面扩展和打印数据流 |
过程 |
输入 |
输入窗口 |
输出 |
输出窗口 |
输入速率 |
输出速率 |
接收连续色调 |
- |
- |
JPEG流 |
1 |
-- |
1.5MB/秒3.5MMp/秒 |
接收二值 |
- |
- |
EDRL流 |
1 |
-- |
1.5MB/秒31Mp/秒 |
对连续色调解压缩 |
JPEG数据流 |
- |
32位CMYK |
8 |
1.5MB/秒3.5Mp/秒 |
13MB/秒3.5Mp/秒 |
对二值解压缩 |
EDRL流 |
- |
1位K |
1 |
1.5MB/秒31Mp/秒a |
15MB/秒124Mp/秒 |
半色调 |
32位CMYK |
1 |
-b |
- |
13MB/秒3.5Mp/秒c |
-- |
复合 |
1位K |
1 |
4位CMYK |
1 |
15MB/秒124Mp/秒 |
60MB/秒124Mp/秒 |
打印 |
4位CMYK |
24,1d |
- |
- |
60MB/秒124Mp/秒 |
-- |
|
91MB/秒 |
91MB/秒 |
|
182MB/秒 |
a.800dpi→1600dpi(2×2扩展)b.半色调与复合相组合,所以在它们之间没有外部数据流c.267dpi→1600dpi(6×6扩展)d.需要24行的窗口,但只提前一行。 |
每个阶段与下一个阶段通过主存储器182中共享的FIFO通信。每个FIFO被组织成行,并且每个FIFO的最小尺寸(数行)被设计为容纳厂家的输出窗口(数行)和用户的输入窗口(数行)。交互阶段主存储器缓冲器在表16中加以说明。利用6.3MB的集合缓冲器空间留下了1.7MB的空余空间给程序代码和擦写存储器(这是在可用8MB的基础上得出的)。
表16页面扩展和打印主存储器缓冲器 |
缓冲器 |
组织和行大小 |
行数 |
缓冲器大小 |
压缩页面缓冲器 |
字节流(一或两页)- |
- |
6MB |
连续色调CMYK缓冲器 |
32位交织CMYK(267ppi×8.5”×32=8.9KB) |
8×2=6 |
142KB |
二值K缓冲器 |
1位K(1600dpi×8.5”×32=8.9KB) |
1×2=2 |
3KB |
二值CMYK缓冲器 |
4位平面奇/偶CMYK(1600api×8.5”×4=6.6KB) |
24+1=25 |
166KB |
|
6.3MB |
整个数据流包括FIFO在内都示于图19。
连续色调页面的解压缩由JPEG解码器196执行。二值页解压缩由EDRL扩展器188执行。半色调处理和复合由半色调器/复合器单元190执行。这些功能单元在下面的章节中说明。
7.2.1 DMA途径
每个功能单元包含一个或多个片上输入和/或输出FIFO。每个FIFO在多通道DMA控制器200中被分配一个分立的通道。DMA控制器200处理单地址而不是双地址传送,并由此为每个通道提供分开的请求/确认接口。
只要输入FIFO被用尽或输出FIFO被填满,则每个功能单元逐渐停止运行。
处理器181对每个DMA传送进行编程。DMA控制器200根据来自与信道连接的功能单元的请求,产生用于每个传送字的地址。当功能单元的请求被DMA控制器200确认时,该功能单元将字锁存到数据总线186上或使字离开数据总线186。当传送完成时,DMA控制器200中断处理器181,从而使处理器181对相同通道上的另一传送进行及时地编程。
总而言之,处理器181将在相应主存储器FIFO可用时(即对于读为不空,对于写为不满)立刻对另一传送编程。
在DMA控制器200中执行的通道业务的间隔尺寸在一定程度上取决于主存储器182的潜力。
7.2.2 EDRL扩展器
图20更详细地示出了EDRL扩展器单元(EEU)188。单元188对EDRL压缩的二值图像进行解压缩。
对EEU 188的输入是一EDRL比特流。从EEU输出的是二值图像行集,其由扩展的二值图像分辨率按1600dpi的整数倍的比例系数进行水平缩放(scaled)。
一旦启动,EEU 188就进行到其检测到EDRL比特流中的end-of-page(页面结束)代码为止,或是直到通过其控制寄存器而明确停止为止。
EEU 188依赖于清楚的页面宽度,以对比特流进行解码。这必须在启动EEU 188之前写入页面宽度寄存器202中。
扩展二值图像的定标取决于清楚的比例系数。这必须在启动EEU188之前写入比例系数寄存器204中。
表17 EDRL扩展器控制和结构寄存器 |
寄存器 |
宽度 |
说明 |
开始 |
1 |
启动EEU |
停止 |
1 |
停止EEU |
页面宽度 |
13 |
在解码以检测行结束时使用的页面宽度 |
比例系数 |
4 |
在扩展图像的定标中使用的比例系数 |
EDRL压缩格式在6.2.3.2节中说明。其通过二值图像的边缘对其进行表示。每个行中每个边缘与前一行中的边缘相关地编码,或与同一行中的前一边缘相关地编码。不管采用何种编码方式,每个边缘被最终解码为其与同一行前一边缘的距离。该距离或游程然后被解码为位1或位0的串,其代表了图像相应的部分。解压缩算法在6.2.3.2节中定义。
EEU 188包括比特流解码器206、状态机208、边缘计算逻辑210、两个游程解码器212、以及游程(再)编码器214。比特流解码器206从比特流中解码出熵编码的代码字,并将其传送到状态机208。状态机208将代码字的尺寸返回至比特流解码器206,其使解码器206进行到下一代码字。在create edge代码的情况下,状态机208使用比特流解码器206来从比特流中提取相应的游程。状态机208如表19所定义的那样控制边缘计算逻辑210和游程解码/编码。
边缘计算逻辑210非常简单。在前一(参考的)和当前(编码的)行中的当前边缘偏差被分别保持在参考边缘寄存器216和边缘寄存器218中。与create edge代码相关的游程被直接输出到游程解码器212.1,并被加到当前边缘。一增量代码通过将相关的增量与参考边缘相加和减去当前边缘而被转换成游程,所生成的游程被输出至游程解码器212.1,并加到当前边缘。从游程编码器214提取出下一游程,并加到参考边缘上。kill edge代码简单地使当前参考边缘被跳过。从游程编码器214再提取出下一游程,并加到参考边缘上。
每次边缘计算逻辑210产生表示边缘的游程时,都使其通过游程解码器212.1。当游程解码器212.1对扫描解码时,其生成一停止信号给状态机208。因为游程解码器212要比边缘计算逻辑210慢,在对其解耦方面没有很多问题。扩展的行累积在足以保存一8.5”800dpi的行(850字节)的行缓冲器220中。
先前扩展的行还在缓冲器222中被缓存。其用作对当前行解码的参考。先前行根据需要被再编码为游程。这要比将先前行的被解码的游程缓存要经济得多,因为最坏的情况是对每个像素有一个13位的游程(在1600dpi时为20KB)。当游程编码器214对扫描编码时,其生成一停止信号给状态机208。游程编码器214使用页面宽度来检测行的结束。(当前)行缓冲器220和先前行缓冲器222被连接和作为单个FIFO来管理,以简化游程编码器214。
第二游程解码器212.2将输出游程解码至行缓冲器224,其足以保存一8.5”1600dpi的行(1700字节)。传递给该输出游程解码器212.2的游程乘上来自寄存器204的比例系数,从而该解码器212.2生成1600dpi的行。该行通过输出像素FIFO被输出比例系数(scale factor)倍。这样就通过简单的行复制达到所要求的垂直定标。EEU 188可以用结合到其图像定标中的edge smoothing(边缘平滑)来设计。基于模板匹配的简单的平滑方案就是非常有效的。这将要求在低分辨率的游程解码器和平滑比例缩放单元之间的多行缓冲器,但省去了高分辨率的游程解码器。
7.2.2.1 EDRL流解码器
EDRL流解码器206(图21)对输入流中的熵编码的EDRL代码字进行解码。其使用通过16位桶式(barrel)移位器228(其左(最高有效位)边缘始终与比特流中的代码字边界对齐)观察的二字节输入缓冲器226。与桶式移位器228连接的解码器230根据表18对代码字进行解码,并向状态机208提供相应代码。
表18EDRL流代码字解码表 |
输入代码字位模式a |
输出代码 |
输出代码位模式 |
1xxx xxxx |
△0 |
1 0000 0000 |
010x xxxx |
△+1 |
0 1000 0000 |
011x xxxx |
△-1 |
0 0100 0000 |
0010 xxxx |
kill edge(除去边缘) |
0 0010 0000 |
0011 xxxx |
create near edge(创建近边缘) |
0 0001 0000 |
0001 0xxx |
△+2 |
0 0000 1000 |
0001 1xxx |
△-2 |
0 0000 0100 |
0000 1xxx |
create far edge(创建远边缘) |
0 0000 0010 |
0000 01xx |
end-of-page(页面结束EOP) |
0 0000 0001 |
ax=无关紧要 |
状态机208依次输出代码的长度。这由累加器232作为以8为模与当前代码字位偏移量相加以产生下一代码字位偏移量。该位偏移量再控制桶式移位器228。如果代码字位偏移量限制,则进位位控制来自输入FIFO的下一字节的锁存。此时字节2被锁存到字节1,并且FIFO输出被锁存为字节2。其采用两个周期的长度8来填充输入缓冲器。这是通过在状态机208的开始状态来处理的。
7.2.2.2 EDRL扩展器状态机
EDRL扩展器状态机208响应于由EDRL流解码器206提供的代码来控制边缘计算和游程扩展逻辑。其向EDRL流解码器206提供当前代码字长度,并向边缘计算逻辑210提供与当前delta代码相关的delta值。状态机208还响应于来自控制寄存器234的开始和停止控制信号(图20),以及来自边缘计算逻辑210的行结束(EOL)信号。
状态机208还控制与create edge代码相关的游程的多周期取用。
表19EDRL扩展器状态机 |
输入信号 |
输入代码 |
当前状态 |
下一状态 |
代码长度 |
增量 |
动作 |
开始 |
- |
停止 |
开始 |
8 |
- |
- |
- |
- |
开始 |
闲置 |
8 |
- |
- |
停止 |
- |
- |
停止 |
0 |
- |
复位RL解码器和FIFO |
EOL |
- |
- |
EOL 1 |
0 |
- |
复位RL编码器;复位RL解码器;复位参考边缘和边缘 |
- |
- |
EOL 1 |
闲置 |
- |
- |
RL编码器→参考RL;参考边缘+参考RL→参考边缘 |
- |
△0 |
闲置 |
闲置 |
1 |
0 |
边缘-参考边缘+delta→RL;边缘+RL→边缘;RL→RL解码器;RL编码器→参考RL;参考边缘+参考RL→参考边缘 |
- |
△+1 |
闲置 |
闲置 |
2 |
+1 |
“ |
- |
△-1 |
闲置 |
闲置 |
3 |
-1 |
“ |
- |
△+2 |
闲置 |
闲置 |
4 |
+2 |
“ |
- |
△-2 |
闲置 |
闲置 |
5 |
-2 |
“ |
- |
除去边缘 |
闲置 |
闲置 |
6 |
- |
RL编码器→参考RL;参考边缘+参考RL→参考边缘 |
- |
创建近边 |
闲置 |
创建RL低7 |
7 |
- |
复位创建RL |
- |
创建远边 |
闲置 |
创建RL高6 |
8 |
- |
- |
- |
EOP |
闲置 |
停止 |
8 |
- |
- |
- |
- |
创建RL高6 |
创建RL低7 |
6 |
- |
锁存创建RL高6 |
- |
- |
创建RL低7 |
创建边缘 |
7 |
- |
锁存创建RL低7 |
- |
- |
创建边缘 |
闲置 |
0 |
- |
创建RL→RL;边缘+RL→边缘;RL→RL编码器 |
7.2.2.3游程解码器
游程解码器212把一个游程长度扩展成输出流中相应长度的位零或位一的序列。一行中的第一个游程被假定为白色(颜色0)。每个游程被假定为具有与其前一个游程相反的颜色。如果第一个游程实际上为黑色(颜色1),那么它的正面一定是零长的白色游程。游程解码器212在内部感知当前的颜色。
游程解码器212在每个时钟内为输出流附加最多为8个位。游程通常不是8的整数倍,因此在图像中除了第一个以外的操作通常不进行字节对齐。在字节空间寄存器236(图22)中,游程解码器212保持了当前建立起来的字节中可用的位数。该数目在解码开始时,在输出的每个字节被初始化为8。
下一个游程行248把一个非零值一锁存入游程寄存器238,解码器212就开始输出连续的一列二进制位。当游程寄存器238到零时,解码器212实际上已经停止。
在每个时钟内大量当前颜色的二进制位被移入输出字节寄存器240。当前颜色被保存在一位颜色寄存器242中。实际输出的位数要受游程中剩余的位数以及输出字节中剩余的备用位数的限制。输出的位数要从游程和字节空间中减去。当游程到达零,它已被完全解码,尽管该游程后面尾随的位仍然在输出字节寄存器240中等待输出。当字节空间到达零时,输出字节变满并附加在输出流上。
16位的桶式移位器244、输出字节寄存器240和颜色寄存器242一起执行一个8位移位寄存器的功能,该寄存器可以移动每个时钟内的多个二进制位的位置,而把颜色作为串行输入。
外部的“复位”线246用于在每个线的开始处对游程解码器212进行复位。外部的“下一游程”线248用于请求对新的游程长度进行解码,这一过程还伴随有外部“游程”线250上的一个游程长度。“下一游程”线248的时钟不应当在复位线246的同一时钟上设置。因为“下一游程”反转当前颜色,颜色的复位把其设置为1而不是0。外部刷新线252用于刷新该操作的最后的字节,如果该字节不完整的话。它还可以用在逐行基础上而产生字节对齐的线,或者用在图像基础上而产生字节对齐的图像。
外部就绪线254用于表示游程解码器212是否准备好对一个游程长度进行解码。它可用于停止外部逻辑电路。
7.2.2.4游程编码器
游程编码器214检测输入流中连续的一串0或1位。一个行中的第一游程被假定为白色(颜色0)。每个游程被假定为与其前一个游程具有相反的颜色。如果第一个游程实际上为黑色(颜色1),那么游程编码器214在该行的开始产生一个零长的白色游程。游程编码器214在内部跟踪当前的颜色。
游程编码器214在每个时钟内从输入流中读取最多8个位。它使用一个二字节输入缓冲器256(图23)来查看一个16位的桶式移位器258,该移位器的左边(最高有效位)总是与位流中的当前位置对齐。与桶式移位器258相连的编码器260根据表20对8位(部分)游程进行编码。8位游程编码器260使用当前颜色来识别合适颜色的游程。
由8位游程编码器260产生的8位游程被加到游程寄存器262中的值上。当8位游程编码器260识别了当前游程的末端时,它产生一个游程结束信号,该信号可由一个就绪寄存器264进行锁存。该就绪寄存器264的输出表明编码器214已经完成了对当前游程的编码,并存储在游程寄存器262中。就绪寄存器264的输出还可以用于停止8位游程编码器260。当被停止的8位游程编码器260输出一个零长游程和一个为零的游程结束信号时,停止整个游程编码器214的动作。
表20.8位游程编码器表 |
颜色 |
输入 |
长度 |
游程末端 |
0 |
0000 0000 |
8 |
0 |
0 |
0000 0001 |
7 |
1 |
0 |
0000 001x |
6 |
1 |
0 |
0000 01xx |
5 |
1 |
0 |
0000 1xxx |
4 |
1 |
0 |
0001 xxxx |
3 |
1 |
0 |
001x xxxx |
2 |
1 |
0 |
01xx xxxx |
1 |
1 |
0 |
1xxx xxxx |
0 |
1 |
1 |
1111 1111 |
8 |
0 |
1 |
1111 1110 |
7 |
1 |
1 |
1111 110x |
6 |
1 |
1 |
1111 10xx |
5 |
1 |
1 |
1111 0xxx |
4 |
1 |
1 |
1110 xxxx |
3 |
1 |
1 |
110x xxxx |
2 |
1 |
1 |
10xx xxxx |
1 |
1 |
1 |
0xxx xxxx |
0 |
1 |
8位游程编码器260的输出要受到剩余页宽的限制。实际的8位游程要从剩余的页宽中减去,并被加到一个模8的二进制位位置累加器266,该累加器用于控制桶式移位器258并对字节流输入定时。
外部的“复位”线268用于在每个线的开始处对游程解码器214进行复位。它重新设置当前颜色,并把线270上的一个页宽信号锁存在页宽寄存器272中。外部的”下一游程”线274用于向游程编码器214发出另一个游程的请求。它反转当前颜色,并重新设置游程寄存器262和就绪寄存器264。外部刷新线276用于刷新该操作的最后的字节,如果该字节不完整的话。它还可以在逐行基础上用于处理字节对齐的线,或者在图像基础上用于处理字节对齐的图像。
外部“就绪”线278用于表示游程编码器214已准备好对一个游程长度进行编码,并且当前的游程在“游程”线280上可以得到。它可以用于停止外部逻辑电路。
7.2.2.5定时
EEU 188的输出速率为124M的1-位黑色像素/秒。核心逻辑电路每个时钟产生一个游程长度。游程解码器212和游程编码器214每个时钟产生/消耗多达8个像素(位)。一个游程解码器212.1和游程编码器214以四位字节分辨率(800dpi)运行。另一个游程解码器212.2以全分辨率(1600dpi)运行。
一个包括3点文本的整页的最不利的二值图像在800dpi(着色分辨率)的情况下转换为大约6M的游程长度。在1600dpi(垂直输出分辨率)的情况下,会给出一个大约为20的平均游程长度。因此,大约40%的8像素输出字节跨越两个游程,这样就需要2个时钟而不是1个时钟。输出行在垂直方向进行复制以获得1600dpi的垂直分辨率。当行被复制而不是被产生时,在每个时钟内它有一个8像素的优良效率,这样额外开销就被减小到20%。
EEU 188的输出阶段中全分辨率游程解码器是EEU 188中最慢的部件。因此,EEU 188的最小时钟速度由EEU的输出像素速率(124M像素/秒)控制,由游程解码器的宽度(8)分割,并针对其最不利的额外开销(20%)进行调整。这会给出22MHz的最小速度。
7.2.3 JPEG解码器
JPEG解码器196(图24)对以JPEG格式压缩的CMYK连续色调图像解压缩。
向JPEG解码器196的输入为JPEG位流。从JPEG解码器196的输出为一套连续色调CMYK图像行。
在进行解压缩时,JPEG解码器196以8×8像素块的形式写其输出。这些输出有时会通过一个与编解码装置紧密连接的页宽×8条形缓冲区转换为全宽行。这需要一个67KB的缓冲区。但是,我们使用的是如图24所示的有共享总线入口的8个平行像素FIFO 282和8个相应的DMA通道。
7.2.3.1定时
JPEG解码器196的输出速率为3.5M32-位CMYK像素/秒。解码器所要求的时钟速度取决于解码器的设计。
7.2.4半色调器/复合器
半色调器/复合器装置(HCU)190(图25)把以下功能进行了合并:把连续色调CMYK层调色为二值CMYK,把黑色层复合在进行了调色的连续色调层上。
HCU 190的输入是一个扩展的267ppi的CMYK连续色调层和一个扩展的1600dpi的黑色层。从HCU 190输出的是一套1600dpi的二值CMYK图像行。
一旦开始运行,HCU 190就一直运行到它检测到页末端情况为止,或者运行到它被其控制寄存器284明确停止为止。
HCU 190生成一页有规定宽度和长度的点。这些宽度和长度必须在启动HCU 190之前写入控制寄存器284的页宽和页长寄存器中。页宽对应于打印头的宽度,页长对应于目标页的长度。
HCU 190在与页宽相关的特定的左边距和右边距之间产生目标页数据。左边距和右边距的位置必须在启动HCU 190之前写入控制寄存器284的左边距和右边距寄存器中。左边距与右边距之间的距离对应于目标页的宽度。
HCU 190根据特定的黑色和连续色调页宽使用黑色和连续色调数据。这些页宽必须在启动HCU 190之前写入控制寄存器284的黑色页宽和连续色调页宽寄存器中。HCU 190把黑色和连续色调数据修剪为目标页的宽度。这使得黑色和连续色调页宽可以超过目标页的宽度而不需要输入FIFO级的任何特殊的行结束逻辑。
图26描述了页宽、黑色和连续色调页宽以及边距之间的关系。
HCU 190根据特定的比例系数在水平和垂直方向把连续色调数据调整为打印机的分辨率。该比例系数必须在启动HCU 190之前写入控制寄存器284的连续色调比例系数寄存器中。
表21.半色调器/复合器控制和配置寄存器 |
寄存器 |
宽度 |
说明 |
启动 |
1 |
启动HCU |
停止 |
1 |
停止HCU |
页宽 |
14 |
打印页的页宽,以点计算。这是每行必须要产生的点的数目。 |
左边距 |
14 |
左边距的位置,以点计算。 |
右边距 |
14 |
右边距的位置,以点计算。 |
页长 |
15 |
打印页的页长,以点计算。这是每页必须要产生的行的数目。 |
黑色页宽 |
14 |
黑色层的页宽,以点计算。用于检测一个黑色行的末端。 |
连续色调页宽 |
14 |
连续色调层的页宽,以点计算。用于检测连续色调行的末端。 |
连续色调比例系数 |
4 |
比例系数,用于把连续色调数据调整为二值分辨率。 |
打印头接口192使用HCU 190所产生的数据。打印头接口192需要平面格式的二值CMYK图像数据,即分离开的颜色平面。另外,它还要求把偶数和奇数像素分离开。因此HCU 190在输出阶段使用8个并行的像素FIFO 286,它们分别用于偶数青绿,奇数青绿,偶数品红,奇数品红,偶数黄,奇数黄,偶数黑,奇数黑。
输入连续色调CMYK FIFO 288是一个9KB的行缓冲区。使用行连续色调比例系数次以通过行复制来实现垂直比例放大。FIFO写地址封装在开始最后使用该行时失效。另一种选择是从主存储器中读取行连续色调比例系数次,以44MB/秒增加存储器的通信量,但是避免了对芯片上9KB行缓冲器的需要。
7.2.4.1多阈值高频振动器
图27的附图中显示了一个多阈值高频振动器装置290。通过对不同亮度水平的解耦,通常256层的高频振动量在高频振动器元件设计中提供了很大的灵活性。通常的高频振动量可以很大,例如64×64×256的高频振动量具有128KB的空间。它们访问起来也不是太有效,因为每个颜色成分都需要从这些量中恢复不同的位。在实践中,没有必要完全将高频振动量的每一层解耦。振动量的每个点列可以作为固定的一组阈值而不是256个单独的二进制位来执行。例如使用三个8位阈值只会占用24位。现在,n个阈值定义n+1个亮度间隔,在这些亮度间隔中,相应的高频振动单元位置交替设定或未设定。被高频振动的连续色调像素值从n+1个间隔中唯一地选择一个,这便确定了相对应的输出点的值。
我们使用三阈值64×64×3×8位(12KB)的振动量来振动连续色调数据。这三个阈值形成了一个周期中可以从高频振动单元ROM检索的方便的24位值。如果颜色平面之间需要高频振动单元定位,那么可以再次检索三阈值并用其对每个颜色成分进行高频振动。如果不需要高频振动单元定位,那么高频振动单元可以分解成四个子单元,并存储在四个可独立寻址的ROM中,在一个周期中,四个不同的三阈值可以从这四个可独立寻址的ROM中恢复。利用如下所示的寻址模式,四个颜色平面可以在彼此间垂直和/或水平偏移量为32点时共享相同的高频振动单元。
每个三阈值装置292把一个三阈值和一个亮度值转换为一个间隔,再由此转换为一个一或零位。表22显示了三阈值规则。图28显示了相对应的逻辑电路。
表22.三阈值规则 |
间隔 |
输出 |
V≤T1 |
0 |
T1<V≤T2 |
1 |
T2<V≤T3 |
0 |
T3<V |
1 |
7.2.4.2复合
HCU 190的复合装置294把黑色层点复合在经半色调处理的CMYK层点上。如果黑色层的暗度为1,那么经半色调处理的CMYK被设定为0。
给出一个4位的经半色调处理的颜色C
cM
cY
cK
c和一个1位的黑色层暗度K
b,那么合成逻辑电路由表23定义。
表23.合成逻辑电路 |
颜色通道 |
状态 |
C |
Cc∧Kb |
M |
Mc∧Kb |
Y |
Yc∧Kb |
K |
Kc∨Kb |
7.2.4.3时钟启动发生器
HCU 190的时钟启动发生器296产生一个启动信号,以对连续色调CMYK像素输入、黑色点输入和CMYK点输出进行时钟控制。
如前所述,连续色调像素输入缓冲区既被用作行缓冲器也被用作FIFO。每个行被读取一次,然后被使用相应于“连续色调比例系数”的次数。FIFO写地址封装在开始最后复制使用该行时失效,此时时钟启动发生器296产生一个“连续色调行前进启动信号”以启动打包(wrapping)。
时钟启动发生器296还产生一个偶校验信号和一个边距信号,前者用于选择偶数或奇数组的输出点FIFO,后者用于在当前点的位置处于页的左边距和右边距处时产生白色点。
时钟启动发生器296使用一组计数器。表24中定义了计数器的内部逻辑。表25中定义了时钟启动信号的逻辑电路。
表24.时钟启动发生器计数器逻辑电路 |
计数器 |
缩写 |
宽度 |
数据 |
负载条件 |
递减条件 |
点 |
D |
14 |
页宽 |
RPa∨EOLb |
(D>0)∧clk |
线 |
L |
15 |
页长 |
RP |
(L>0)∧EOL |
左边距 |
LM |
14 |
左边距 |
RP∨EOL |
(LM>0)∧clk |
右边距 |
RM |
14 |
右边距 |
RP∨EOL |
(RM>0)∧clk |
偶数/奇数点 |
E |
1 |
0 |
RP∨EOL |
Clk |
黑色点 |
BD |
14 |
黑色宽 |
RP∨EOL |
(LM=0)∧(BD>0)∧clk |
连续色调点 |
CD |
14 |
连续色调宽 |
RP∨EOL |
(LM=0)∧clk |
连续色调子像素 |
CSP |
4 |
连续色调比例系数 |
RP∨EOL∨(CSP=0) |
(LM=0)∧(CD>0)∧clk |
连续色调子线 |
CSL |
4 |
连续色调比例系数 |
RP∨(CSP=0) |
EOL∧clk |
aRP(复位页)条件:外部信号bEOL(行结束)条件:(D=0)∧(BD=0)∧(CD=0) |
表25.时钟启动发生器输出信号逻辑 |
输出信号 |
状态 |
输出点时钟启动 |
(D>0)△EOP |
黑色点时钟启动 |
(LM=0)∧(BD>0)∧EOP |
连续色调像素时钟启动 |
(LM=0)∧(CD>0)∧(CSP=0)∧EOP |
连续色调线前进启动 |
(CSP=0)∧EOP |
偶校验 |
E=0 |
边距 |
(LM=0)∨(RM=0) |
aEOP(页结束)条件:L=0 |
7.2.4.4定时
HCU 190的输出速率为124M的4位CMYK像素/秒。因为它在每个时钟周期产生一个像素,因此它必须以124MHz的频率进行计时。
7.3打印头接口
如第9节所述,CePrint 10使用8.5″CMYK Memjet打印头143。该打印头包括2个段组中安置的17个段。第一段组包括9个段,第二段组包括8个段。打印头143中每种颜色有13,600个喷嘴,这样总共就有54,400个喷嘴。
如第10节所述,打印头接口192是一种标准的Memjet打印头接口,配置有以下操作参数:
·最大颜色数(MaxColors)=4
·每个转换的段数(SegmentsPerXfer)=9
·段组数(SegmentGroups)=2
尽管打印头接口192具有大量的外部连接,但并不是所有的都用于8.5″打印头,因此也并不是所有的这些外部连接都连接在CCP 180的外部插针上。特别地,段组数的值表明只有2个SRClock插针和2个SenseSegSelect插针。但是所有36个ColorData(颜色数据)插针都需要。
7.3.1定时
CePrint 10在2秒内可以打印一个8.3″×11.7″页。打印头143因此也必须在2秒钟内打印18,720行(11.7″×1600dpi),这样打印一行的时间大约为107μs。在打印头接口192内,单独的一个打印周期和一个装载周期都必须在该时间内完成。而且,纸144在相同的这段时间内必须前进大约16μm。
在高速打印模式中,Memjet打印头143可以在100μs内打印完一整行。因为所有的段都是同时开始,因此544个喷嘴也是在每个开启脉冲内同时开始。这样在每行之间就有7μs的时间可用于执行其他任务。
抵达打印头143的1600个SRClock脉冲(SRClock1和SRClock2各800)(SRClock1有36位有效数据,SRClock2有32位有效数据)也必须在107μs的行时间内发生。把时间限定在100μs,一个SRClock脉冲的长度不能超过100μs/1600=62.5ns。打印头143也必须以16MHz的频率进行计时。
打印头接口192的额定像素速率为124M的4位CMYK像素/秒。但是,因为它只在每107μs中的100μs内有效,因此它必须至少以140MHz的频率进行计时。还可以把它增加到144MHz以使其为打印头速度的整数倍。
7.4处理器和存储器
7.4.1处理器
处理器181运行控制程序,使其他功能部件在页接收、扩展和打印过程中保持同步。它还运行各种外部接口的设备驱动程序,并通过用户接口对用户的操作作出反应。
它必须具有短的中断等待时间,以提供有效的DMA管理,但是在其他方面它不需要具有特别高的性能。
7.4.2 DMA控制器
DMA控制器200支持29个通道上的单地址转移(见表26)。在转移完成时,它向处理器181发出矢量化的中断。
表26.DMA的通道使用 |
功能部件 |
输入通道 |
输出 |
通道 | | |
主机接口 |
- |
1 |
Inter-CCP接口 |
1 |
1 |
EDRL扩展器 |
1 |
1 |
JPEG解码器 |
1 |
8 |
半色调器/复合器 |
2 |
8 |
扬声器接口 |
1 |
- |
打印头接口 |
4 |
- |
|
10 |
19 |
|
29 |
7.4.3程序ROM
程序ROM298保持有CCP 180控制程序,它是在系统引导过程中装入主存储器182的。
7.4.4 Rambus接口
Rambus接口198为外部的8MB(64M二进制位)RambusDRAM(RDRAM)182提供高速接口。
7.5外部接口
7.5.1主机接口
主机接口194提供与主处理器的连接,速度至少为1.5MB/秒(或对于CePrint的双面型为3MB/秒)。
7.5.2扬声器接口
扬声器接口300(图29)包括:一个小型FIFO 302,用于从主存储器182进行声音剪辑的DMA间接转移;一个8位数模转换器(DAC)304,用于把每个8位样本值转换为电压;放大器306,用于馈送外部扬声器308(图18)。当FIFO 302为空时,它输出一个零值。
扬声器接口300以声音剪辑的频率进行计时。
处理器181只是通过对扬声器接口300的DMA通道进行编程,便可以向扬声器308输出一个声音剪辑。
7.5.3并行接口
并行接口309提供大量并行外部信号线上的I/O。它使得处理器181能够检测或控制表27中所列出的设备。
表27.并行接口设备 |
并行接口设备 |
电源按钮 |
电源LED |
无纸LED |
无墨LED |
介质传感器 |
纸张拾取辊轮位置传感器 |
纸匣驱动位置传感器 |
纸张拾取电机 |
纸匣顶推器电机 |
转印辊轮步进电机 |
7.5.4串行接口
串行接口310提供两个标准的低速串行口。一个口用于连接主QA芯片184。另一个用于连接墨盒中的QA芯片312。两个串行口之间的以处理器为媒介的协议被用于鉴别墨盒。然后处理器181从QA芯片312检索墨水的特性,以及每种墨水的剩余量。处理器181根据这些墨水特性,合理地配置Memjet打印头143。它根据剩余的墨水量以确保打印头不会因为墨水用光而遭到损坏,而剩余的墨水量是根据打印头接口192所搜集的墨水消耗信息在逐页的基础上不断更新的。
7.5.4.1墨盒QA芯片
墨盒32中的QA芯片312包含着保持最佳可能打印质量所要求的信息,它需要利用鉴别芯片来执行。鉴别芯片中的256位数据按如下方式进行分配:
表28.墨盒的256位(16个16位的入口) |
M[n] |
访问 |
宽度 |
说明 |
0 |
ROa |
16 |
基本标题,标志等 |
1 |
RO |
16 |
序列号 |
2 |
RO |
16 |
批号 |
3 |
RO |
16 |
保留用于将来扩展。必须为0 |
4 |
RO |
16 |
青绿色墨水特性 |
5 |
RO |
16 |
品红墨水特性 |
6 |
RO |
16 |
黄色墨水特性 |
7 |
RO |
16 |
黑色墨水特性 |
8-9 |
DOb |
32 |
青绿色墨水剩余量,以毫微升计算 |
10-11 |
DO |
32 |
品红色墨水剩余量,以毫微升计算 |
12-13 |
DO |
32 |
黄色墨水剩余量,以毫微升计算 |
14-15 |
DO |
32 |
黑色墨水剩余量,以毫微升计算 |
a只读(RO)b只减少 |
在打印每一页之前,处理器181必须检测剩余的墨水量,以确保其有足够的量用于打印最不利情况下的页。一旦打印了该页,处理器181根据每滴的体积增加每种颜色总的滴数(从打印头接口192获得)。所打印的墨水的量从剩余的墨水中减去。剩余的墨水量的测量单位为毫微升,因此32位可以代表超过4升的墨水。用于打印一页的墨水量必须上舍入到最接近的毫微升(即大约1000个打印点)。
7.5.5 inter-CCP接口
inter-CCP接口314提供一个与第二个CCP进行双向高速的串行通信连接,它用于多CCP配置如包含两个CCP的打印机的双面型。
这种连接的最小速度为30MB/秒,可以支持每页数据的适时分配,它可以利用一种技术如IEEE1394或Rambus来执行。
7.5.6 JTAG接口
加入标准的JTAG(联合测试操作组)接口(未显示)以用于测试目的。由于芯片的复杂性,需要多种测试技术,包括BIST(内部自测)和功能块隔离。芯片区域中10%的额外开销用于承担总的芯片测试电路。
8双面打印
CePrint的双面打印方案包括两个完整的打印引擎或打印单元140,一个用于打印纸的正面,另一个用于打印纸的反面。每个打印单元140包括:一个打印机控制器178,一个包含了Memjet打印头143的打印头组合体142,和一个转印辊轮68。两个打印单元140共用相同的墨水供应。反面的或下面的打印单元140为主单元。它负责打印机的全局功能,例如与主机的通信、处理墨盒32、处理用户接口、控制纸张的传送。正面的或上面的打印单元140为副单元。它通过主单元从主处理器得到页,在打印过程中的主单元负责其的同步运行。
两个打印机控制器178都包括一个CePrint中央处理器(CCP)180和一个局部的8MB RDRAM182。主单元的外部接口的使用方法与CePrint的单面型的使用方法相同,但是只使用存储器接口和副单元的打印头接口192。CCP180上的一个外部主/副插针选择操作模式。
这种双打印机控制器的配置在图30中进行了说明。
8.1页的传送与分配
主CCP 180M(图30)把打印机10的总体检查情况提供给主处理器。它隐藏了副CCP 180S的存在。
页面以页码的顺序从主处理器向打印机传送。文件的第一页总是一个页的正面,正面页和反面页总是交插进行的。这样奇数页为正面页,偶数页为反面页。为了以单面模式打印纸张的正面或反面,主机必须向打印机发送适当的空白页。打印机希望得到每一页的页面说明。
当主CCP 180M从主处理器接收到一个与奇数页相关的页面命令时,它通过inter-CCP串行连接314把该命令发送给副CCP 180S。为了避免给主机连接及其协议附加过度的限制,每个命令在发送到副CCP的存储器182S之前,都被完整地接收并存储在主CCP的局部存储器182M中。这样只引起很小的延迟,因为inter-CCP连接的速度很快。为了确保主CCP 180M总是有可用的页缓冲区用于存储向副CCP180S发送的页,主CCP总是有意做成反面CCP,这样在它接收到相匹配的反面为偶数的页之前,它就可以接收到正面为奇数的页。
8.2同步打印
一旦主CCP 180M和副CCP 180S接收到了它们各自的页,主CCP180M就开始实际的打印。这包括启动页面扩展和主CCP 180M中的打印程序,以及通过inter-CCP串行连接314发送的命令开始副CCP180S中相同的过程。
为了在正面和反面的打印页之间达到理想的对齐,两个CCP的打印头接口192都与共同的行同步信号同步。该同步信号是由主CCP180M产生的。
一旦两个CCP中的打印管线如打印头接口的行装载器/格式单元(LLFU)的停止状态所指示的那样被灌注好时(第10.4节),主CCP 180M就启动打印头接口192的行同步发生器单元(LSGU)(第10.2节)。主CCP180M通过inter-CCP串行连接314所发送的轮询获得副CCP 180SLLFU的状态。
在打印完一页或更多页之后,主CCP 180M通过inter-CCP连接314从副180S处获得墨水消耗信息。利用该信息,主180M更新墨盒32中剩余的墨水量,这些在部分7.5.4.1中有所描述。
主CCP 180M和副CCP 180S还通过inter-CCP连接314交换错误事件以及主机启动的打印机复位命令。
9 MEMJET打印头
Memjet打印头143是一种依命令而滴下的1600dpi的喷墨打印机,该打印机可以以四种颜色产生二值的点从而生成特定宽度的打印页。因为打印头以1600dpi来打印点,因此每个点的直径大约为22.5mm,各点之间的间隔大约为15.875mm。因为打印是二值的,因此输入的图像应当进行高频振动或差错分散以得到最好的结果。
用于特殊应用的Memjet打印头一般是整个页宽。这使得打印头143固定,而使纸张144移动通过打印头143。图31描述了这种典型的结构。
Memjet打印头143由大量完全相同的1/2英寸的Memjet段构成。因此这种段是构建打印头143的基本的组成部件。
9.1 Memjet段的结构
这一部分将分析单个段的结构,每个段都是构建Memjet打印头143的基本组成部件。
9.1.1每个段内的喷嘴分组
单个段内的喷嘴出于物理稳定性以及使打印过程中消耗最小量电能的原因而被分组。考虑到物理稳定性,总共10个喷嘴共用相同的墨池。根据电能消耗,分组要使得有低速和高速两种打印模式。Memjet段支持两种打印速度,以便在不同的产品结构中速度/电能消耗能够折衷。
在低速打印模式中,每次每种颜色有4个喷嘴从该段喷射。进行喷射的喷嘴的确切数目取决于打印头中存在多少种颜色。在一个四种颜色(例如CMYK)的打印环境下,这等于有32个喷嘴同时喷射。在一个三种颜色(例如CMY)的打印环境下,这等于有24个喷嘴同时喷射。如果要使一个段中的所有喷嘴喷射,必须使100个不同组的喷嘴喷射。
低速模式下电能的消耗量是高速模式的一半。但是应当注意,打印一页所消耗的能量在这两种情况下是相同的。
9.1.1.1十个喷嘴组成一个群
单独的一个群由共用一个墨池的10个喷嘴组成。其中5个喷嘴一排,另5个喷嘴在另一排。每个喷嘴产生的点直径为22.5mm,分布在以1600dpi打印的间隔为15.875mm的网格上。图23显示了单独的一个群的排列情况,其中喷嘴是根据它们必须喷射的顺序来编号的。
尽管喷嘴是以此顺序进行喷射的,但是喷嘴与打印页上的点的物理布局的关系是不同的。一排的喷嘴代表着来自一个页上一行的偶数点,另一排的喷嘴则代表着来自该页上相邻行的奇数点。图33显示了相同的一个群,其中的喷嘴是按照它们必须载入的顺序来编号的。
因此,一个群内的喷嘴在逻辑上是由1个点的宽度分离开来的。喷嘴之间的确切距离将取决于Memjet喷射机构的性能。打印头143的设计是使喷嘴错开以与纸的走向相匹配。
9.1.1.2每种颜色的一个群构成一个色度群
每种颜色的一个群被分组归入一个色度群中。一个色度群中群的数目取决于特定的用途。在单色打印系统中(例如只打印黑色的系统),只有单一的颜色,因此也只有一个群。照片印刷应用中的打印头需要三种颜色(青绿,品红和黄),因此这些应用中所使用的Memjet段每个色度群将会有3个群(每种颜色一个群)。预计一个色度群中群的最大数目为4个,象CMYK(青绿,品红,黄,黑)打印系统(例如桌面打印机)就是如此。这种最大四种颜色的情况并不受任何物理限制条件的制约-它仅仅是预计应用中的预计的最大数目(当然,随着颜色数目的增加,段的制作成本也会增加,而从单一的硅片上制作这些更大的段的数目将会减少)。
一个色度群代表了不同行上同一水平组的10个点的不同颜色成分。不同颜色群之间的确切距离取决于Memjet操作参数,可能会随Memjet设计的不同而不同。该距离被认为是点宽的常数倍,因此在打印时必须考虑进去:青绿喷嘴打印的点所在的行与品红喷嘴,黄喷嘴或黑喷嘴打印的点所在的行是不同的。打印算法必须在颜色之间留出可变的距离,该距离可多达8个点宽。图34显示了CMYK印刷应用中的一个单独的色度群。
9.1.1.3五个色度群组成一个群组
五个色度群可以组成单独的一个群组。因此一个群组包含每种颜色的50个喷嘴。色度群的排列如图35所示,以CMYK色度群为例,把色度群编号为0-4。应当注意,相邻色度群之间的距离为了清楚起见有所夸大。
9.1.1.4两个群组组成一个阶段组
两个群组可以组成一个阶段组。之所以命名为阶段组是因为在一个给定的喷射阶段中阶段组中的喷嘴同时喷射(下面将对此进行更详细的解释)。由两个群组构成一个阶段组完全是为了通过2个“群组启动”(Podgroup Enable)线进行低速和高速打印的目的。
在低速打印过程中,两个群组启动线中只有一个被设置了给定的喷射脉冲,这样两个群组中只有一个可以使其中的喷嘴喷射。在高速打印过程中,两个群组启动线都被设置,因此两个群组中的喷嘴都喷射。因此,低速打印与高速打印相比要花费两倍的时间,因为高速打印一次有两倍于低速打印的喷嘴进行喷射。
图36描述了阶段组的构成情况。相邻群组之间的距离为了清楚起见有所夸大。
9.1.1.5两个阶段组构成一个喷射组
两个阶段组(阶段组A和阶段组B)可以组成单个的喷射组,而每个段中有4个喷射组。之所以命名为喷射组是因为它们全都同时使相同的喷嘴进行喷射。两个启动线,A启动(AEnable)和B启动(BEnable),使得阶段组A的喷嘴和阶段组B的喷嘴在不同的喷射阶段可以独立喷射。图37显示了它们的排列情况。相邻编组之间的距离为了清楚起见有所夸大。
9.1.1.6喷嘴分组概述
表29是假定为CMYK色度群的一个段中喷嘴分组的概述。
表29.单个段的喷嘴分组 |
分组名称 |
构成 |
复制比例 |
喷嘴数目 |
喷嘴(Nozzle) |
基本单位 |
1∶1 |
1 |
群(Pod) |
每个群的喷嘴 |
10∶1 |
10 |
色度群(Chromapod) |
每个色度群中的群 |
C∶1 |
10C |
群组(Podgroup) |
每个群组中的色度群 |
5∶1 |
50C |
阶段组(Phasegroup) |
每个阶段组中的群组 |
2∶1 |
100C |
喷射组(Firegroup) |
每个喷射组中的阶段组 |
2∶1 |
200C |
段(Segment) |
每个段中的喷射组 |
4∶1 |
800C |
C的值,也就是段中的颜色数目决定了喷嘴的总数。
·对于4种颜色的段,如CMYK,每个段中的喷嘴数为3,200。
·对于3种颜色的段,如CMY,每个段中的喷嘴数为2,400。
·在单色条件下,每个段中的喷嘴数为800。
9.1.2装载和打印周期
单个段包括总共800C个喷嘴,其中C是该段中颜色的数目。一个打印周期包括使所有的这些喷嘴进行喷射,这取决于要打印的信息。一个装载周期涉及到给段装载在后续的打印周期中所要打印的信息。
每个喷嘴都有一个相关的“喷嘴启动”(NozzleEnable)位,以确定在打印周期中该喷嘴是否喷射。这些喷嘴启动位(每个喷嘴一个)是通过一组移位寄存器来装载的。
逻辑上,每个段有C个移位寄存器(每种颜色一个),每个寄存器800deep。随着对于给定的颜色而把二进制位移入移位寄存器,这些二进制位在交替的脉冲作用下被发送用于控制下面和上面的喷嘴。在内部,每个800deep的移位寄存器由两个400deep的移位寄存器组成:一个用于上面的喷嘴,一个用于下面的喷嘴。交替的二进制位被移入交替的内部寄存器中。但是如果仅考虑外部接口,就只有单独的一个800deep的移位寄存器。
一旦所有的移位寄存器被装载满(800个装载脉冲),则所有的二进制位都被并行传送给合适的喷嘴启动二进制位。这与单独并行传送800C的二进制位是等同的。一旦传送发生,打印周期也就开始了。只要在打印周期结束时所有的“喷嘴启动”位都开始并行装载,那么打印周期和装载周期可以同时发生。
9.1.2.1装载周期
装载周期涉及到在段的移位寄存器中载入下一个打印周期的喷嘴启动位。
每个段有C个与C个移位寄存器直接相关的输入(其中C是该段中颜色的数目)。这些输入被命名为ColorNData,其中N为从1到C(例如,一个4种颜色的段将会有4个分别标志为ColorlData,Color2Data,Color3Data,和Color4data的输入)。SRClock线上的单独的一个脉冲把C个二进制位传送到合适的移位寄存器中。然后再由交替进行的脉冲把这些位分别传送给上面的喷嘴和下面的喷嘴。要完全地传送这些数据总共需要800个脉冲。一旦所有这800C个位都被传送,PTransfer线上的一个单独的脉冲会把这些数据从移位寄存器并行传送到合适的喷嘴启动位上。
通过PTransfer上的脉冲进行并行传送必须发生在打印周期完成之后,否则用于被打印的行的喷嘴启动位将会是错误的。
需要特别注意的是,奇数和偶数点的输出,尽管是在相同的打印周期中打印的,但它们并不出现在相同的物理输出行上。在打印头内对奇数和偶数喷嘴作出的物理分离,以及在不同颜色的喷嘴之间所作出的分离都保证了它们会在页的不同行上产生点。在把数据载入打印头143时这种相对差异必须加以考虑。行中的实际差异取决于打印头143所使用的喷墨机构的特性。这种差异可以由变量D
1和D
2来定义,其中D
1是不同颜色的喷嘴之间的距离,D
2是相同颜色的喷嘴之间的距离。表30显示了在最初的4个脉冲上传送给一个C颜色段的点。
表30.传送到一个段的点的顺序 |
脉冲 |
点 |
颜色1行 |
颜色2行 |
颜色3行 |
颜色C行 |
1 |
0 |
N |
N+D1 a |
N+2D1 |
N+(C-1)D1 |
2 |
1 |
N+D2 b |
N+D1+D2 |
N+2D1+D2 |
N+(C-1)D1+D2 |
3 |
2 |
N |
N+D1 |
N+2D1 |
N+(C-1)D1 |
4 |
3 |
N+D2 |
N+D1+D2 |
N+2D1+D2 |
N+(C-1)D1+D2 |
aD1=一种颜色和下一种颜色的喷嘴之间的行数(可能=4-8)bD2=相同颜色的两排喷嘴之间的行数(可能=1) |
对于所有的800个脉冲也是如此。
可以以最大20MHz的频率把数据计时进入一个段,这样在40μs的时间内就可以载入全部800C二进制位的数据。
9.1.2.2打印周期
单独的一个Memjet打印头段包括800个喷嘴。要一次喷射所有这些喷嘴将会消耗太多的能量,并且在重新装填墨水和喷嘴干扰方面也存在问题。当考虑到一个Memjet打印头由多个1/2英寸段组成,每个段又包括800个喷嘴时,这个问题就会更加明显。因此定义两种喷射模式:一种低速打印模式和一种高速打印模式:
·在低速打印模式中,有200个阶段,每个阶段喷射4C个喷嘴(每个喷射组有C个,C为颜色的数目)。
·在高速打印模式中,有100个阶段,每个阶段喷射8C个喷嘴(每个喷射组有2C个,C为颜色的数目)。
一个给定喷射脉冲中要喷射的喷嘴由以下方式确定:
·3位“色度群选择”(ChromapodSelect)(从喷射组的5个色度群中选择1个)
·4位“喷嘴选择”(NozzleSelect)(从一个群的10个喷嘴中选择1个)
·2位的群组启动线(PodgroupEnable)(选择0,1,或2群组进行喷射)
当设定了其中一个群组启动线时,只有特定群组的4个喷嘴如“色度群选择”和“喷嘴选择”所确定的那样进行喷射。当设定了两个“群组启动”线时,两个群组都将喷射其喷嘴。对于低速模式,需要两个喷射脉冲,“群组启动”=10和01。对于高速模式,只需要一个喷射脉冲,群组启动=11。
喷射脉冲的持续时间由AEnable和BEnable线给出,它们分别负责喷射来自所有喷射组的阶段组A和阶段组B的喷嘴。典型的喷射脉冲的持续时间为1.3—1.8ms。脉冲的持续时间取决于墨水的粘度(这依赖于温度和墨水的特性)和打印头143可用的能量的多少。参看部分9.1.3以了解为了抵偿温度变化,来自打印头143反馈方面的细节。
为了喷射脉冲能够重叠进行,AEnable和BEnable是单独的线。因此,低速打印周期的200个阶段包括100个A阶段和100个B阶段,这样实际上就给出100组阶段A和阶段B。同样地,高速打印周期的100个阶段包括50个A阶段和50个B阶段,这样实际上便给出50组阶段A和阶段B。
图38显示了一个典型的打印周期中的AEnable和BEnable线。在高速打印中,有50个2ms的周期,而在低速打印中有100个2μs的周期。
对于高速打印模式,喷射顺序为
·色度群选择0,喷嘴选择0,群组启动11(阶段A和B)
·色度群选择1,喷嘴选择0,群组启动11(阶段A和B)
·色度群选择2,喷嘴选择0,群组启动11(阶段A和B)
·色度群选择3,喷嘴选择0,群组启动11(阶段A和B)
·色度群选择4,喷嘴选择0,群组启动11(阶段A和B)
·色度群选择0,喷嘴选择1,群组启动11(阶段A和B)
·…
·色度群选择3,喷嘴选择9,群组启动11(阶段A和B)
·色度群选择4,喷嘴选择9,群组启动11(阶段A和B)
对于低速打印模式,喷射顺序是类似的。对于高速模式中“群组启动”为11的每个阶段,把群组启动=01和10的两个阶段按如下方式进行替换:
·色度群选择0,喷嘴选择0,群组启动01(阶段A和B)
·色度群选择0,喷嘴选择0,群组启动10(阶段A和B)
·色度群选择1,喷嘴选择0,群组启动01(阶段A和B)
·色度群选择1,喷嘴选择0,群组启动10(阶段A和B)
·…
·色度群选择3,喷嘴选择9,群组启动01(阶段A和B)
·色度群选择3,喷嘴选择9,群组启动10(阶段A和B)
·色度群选择4,喷嘴选择9,群组启动01(阶段A和B)
·色度群选择4,喷嘴选择9,群组启动10(阶段A和B)
当一个喷嘴喷射时,大约要花100μs的时间来重新灌注。在重新灌注时间未结束之前该喷嘴不能进行喷射。这就把最快打印速度限制为100μs每行。在高速打印模式中,打印一行的时间为100μs,因此从一个喷嘴在一行进行喷射到该喷嘴在下一行进行喷射之间的时间与重新灌注所需时间相匹配。低速打印模式比高速打印模式要慢,因此100μs也是可接收的。
喷嘴的喷射还会在一限定时间内在喷嘴群的共用墨池内造成声音扰动。这种扰动会干扰相同的群中另一个喷嘴的喷射。因此,只要有可能,一个群中的喷嘴的喷射应当偏离开。因此我们先使一个色度群中的四个喷嘴进行喷射(每种颜色一个喷嘴)然后移向群组中的下一个色度群。
·在低速打印模式中,各群组独立进行喷射。因此两个群组中的各5个色度群在第一个色度群再次喷射之前都必须喷射,总共10×2μs个周期。因此每个群每20μs喷射一次。
·在高速打印模式中,群组一起喷射。因此单独的群组中的5个色度群在第一个色度群再次喷射之前都必须喷射,总共5×2μs个周期。因此每个群每10μs喷射一次。
因为墨道为300mm长,而墨水中的声速为大约1500m/s,因此墨道的共振频率为2.5MHz。因此低速模式允许有50个共振周期使得声音脉冲衰减,而高速模式则允许有25个共振周期。因此任何声音扰动在这两种情况下都是极微小的。
9.1.3来自段的反馈
一个段会产生几个反馈线。这些反馈线是用于调整喷射脉冲的时间选择。因为一个打印头中聚集有多个段,因此要有效地把反馈线作为三状态总线来共用,使得每次这些段中只有一个可以把反馈信息送入反馈线中。
段的SenseSegSelect线上与Color1Data上的数据进行逻辑乘的脉冲用于选择该特定的段是否将提供反馈。反馈检测线将从那个段输出一直到下一个SenseSegSelect脉冲。反馈检测线如下:
·Tsense通知控制器打印头的热度。这可以使控制器调整喷射脉冲的时间选择,因为温度会影响墨水的粘度。
·Vsense通知控制器传动器可用的电压为多少。这可以使控制器通过调整脉冲的宽度来补偿扁电池或高压源。
·Rsense通知控制器传动器加热器的电阻(欧姆/平方)。这可以使控制器调整脉冲的宽度以保持恒定能量,而不必虑及加热器的电阻。
·Wsense通知控制器加热器的主要机件的宽度,该宽度由于平版印刷和蚀刻的差异会变化±5%。这使得控制器可以适当地调整脉冲的宽度。
9.1.4预热周期
打印过程有一个很强的停留在平衡温度的趋势。为了保证一幅打印图像的第一部分如一张照片有一致的点的尺寸,在打印任何点之前都必须先达到平衡温度。这一点是通过预热周期来完成的。
预热周期涉及到1s内一个段的所有喷嘴的一个单独的装载周期(也就是使所有的喷嘴喷射)以及发往每个喷嘴的大量很短的喷射脉冲。脉冲的持续时间对于喷射墨滴肯定是不够的,但是对于加热墨水已经足够。每个喷嘴总共需要大约200个脉冲,它们以与标准打印周期相同的顺序循环。
预热模式中的反馈由Tsense提供,该反馈一直延续至温度到达平衡温度(大约高于环境温度30℃)。预热模式的持续时间大约为50毫秒,这取决于墨水成分。
预热要在每个打印作业之前执行。因为这一步是在给打印机传输数据的同时执行的,所以并不影响打印机的性能。
9.1.5清洗周期
为了减少喷嘴阻塞的机会,在每项打印作业之前都要执行清洗操作。每个喷嘴都要向吸收海绵喷射许多次。
每个清洗周期涉及到1s内一个段的所有喷嘴的一个单独的装载周期(也就是使所有的喷嘴喷射)以及发往每个喷嘴的大量很短的喷射脉冲。喷嘴以与标准打印周期相同的喷嘴喷射顺序进行清洗。每个喷嘴喷射的次数取决于墨水的成分以及打印机的空闲时间。象预热一样,清洗周期对打印机的性能没有影响。
9.1.6打印头接口概述
每个段与粘合垫之间有下面这些连接。
表31.段接口的连接 |
名称 |
线 |
说明 |
ChromapodSelect |
3 |
选择哪个色度群喷射(0-4) |
NozzleSelect |
4 |
选择哪个群的喷嘴喷射(0-9) |
PodgroupEnable |
2 |
使群组喷射(选择:01,10,11) |
Aenable |
1 |
群组A的喷射脉冲 |
Benable |
1 |
群组B的喷射脉冲 |
ColorNData |
C |
输入到移位寄存器(1个位用于段中C种颜色的一种) |
SRClock |
1 |
SRClock(ShiftRegisterClock)上的一个脉冲从ColorData向C个移位寄存器载入C个位 |
Ptransfer |
1 |
从移位寄存器向内部的NozzleEnable位并行传送数据(每个喷嘴一个) |
SenseSegSelect |
1 |
SenseSegSelect上与Color1Data上的数据为逻辑乘关系的脉冲选择用于该段的检测线 |
Tsense |
1 |
温度检测 |
Vsense |
1 |
电压检测 |
Rsense |
1 |
电阻检测 |
Wsense |
1 |
宽度检测 |
Logic GND |
1 |
逻辑地 |
Logic PWR |
1 |
逻辑电源 |
V- |
21 |
传动器地 |
V+ |
21 |
传动器电源 |
TOTAL |
62+C |
(如果C为4,总数=66) |
9.2用段来制造Memjet的打印头
一个Memjet打印头是由大量相同的1/2英寸的打印头段组成的。这些1/2英寸的段被加工在一起或在加工后放置在一起从而构成所希望长度的打印头。每个1/2的段在一个页的不同部分打印多达4种颜色的800或1600dpi的二值点从而产生最终的图像。尽管每个段只产生最终图像的800个点,但每个点是由彩色墨水的组合所代表的。
例如,一个4英寸的打印头包括8个段,这8个段通常被加工成一个整体的打印头。在典型的4色(青绿,品红,黄,黑)打印应用中,每个段在一个页的不同部分打印出二值的青绿,品红,黄,黑色点从而产生最终的图像。
一个8英寸的打印头可以由两个4英寸的打印头或由包含了16个段的单独的一个8英寸打印头构建成。但是不管构建机制如何,有效的打印头仍然是8英寸长。
2英寸的打印头有类似的排列,但是只使用4个段。同样地,全洇渗(full-bleed)的A4/信纸打印机使用17个段来打印有效的8.5英寸区域。
由于一个段中喷嘴的总数为800C(见表29),因此一个给定的包括S个段的打印头中喷嘴的总数为800CS。这样,段N就负责打印点800N到800N+799。
在对打印头进行配线时,要考虑到许多因素。因为随着打印头宽度的增加,段的数量增加,连线的数量也会增加。每个段有其自己的ColorData连线(C个)以及用于装载和打印的SRClock和其他一些连线。
9.2.1装载需要考虑的事项
当段的数目S很小时,利用共用的SRClock线并把C位数据置入各段的每个ColorData输入端,从而对所有的段同时装载是合理的。在4英寸打印机中,S=8,因此在单独的一个SRClock脉冲内传送给打印头的位的总数为32。但是对于8英寸的打印机而言,S=16,让64个数据线从打印数据发生器延伸至打印头不可能是合理的。
作为一种替代,可以很方便地把许多段进行分组以用于装载的目的。每个段组中的段数目要足够小以便同时装载,并且它们还共用一个SRClock。例如,8英寸的打印头可以有2个段组,每个段组包含8个段。32个ColorData线可以为两个组共用,而2个SRClock线每个段组一个。
当段组的数目不容易划分时,仍然可以很方便地对段进行分组。其中一个例子是用于打印A4/信纸页的8.5英寸打印机。总共有17个段,可以分为两个9个段的组(每个段可以使用9C个位,第一组使用所有9C个位,而第二组只使用8C个位),或三个6个段的组(同样,最后一个组有C个位不使用)。
随着段组数目的增加,给打印头装载所需的时间也会增加。当只有一个组时,需要800个装载脉冲(每个脉冲传送C个数据位)。当有G个组时,需要800G个装载脉冲。数据发生器和打印头之间的连线的带宽要能够应付这种情况并且要在特定的应用所需时间参数范围内。
如果G为段组的数目,L为一个段组中段的最大数目,那么打印头需要LC个ColorData线和G个SRClock线。如果不管G,则只需要单独的一个PTransfer线-它可在所有的段中共用。
因为每个段组中有L个段载有一个单独的SRClock脉冲,因此任何打印过程都必须以正确的顺序向打印头发送数据。例如,当G=2,L=4时,第一个SRClock1脉冲会把ColorData位传送给下一个打印周期的点0,800,1600和2400。第一个SRClock2脉冲会把ColorData位传送给下一个打印周期的点3200,4000,4800和5600。第二个SRClock1脉冲会把ColorData位传送给下一个打印周期的点1,801,1601和2401。第二个SRClock2脉冲会把ColorData位传送给下一个打印周期的点3201,4001,4801和5601。
在800G个SRClock脉冲(SRClock1和SRClock2各800)之后,整个行被装载到打印头,此时可以给出共用的PTransfer脉冲。
需要着重注意的是,奇数和偶数点的输出,尽管是在相同的打印周期中打印的,但它们并不出现在相同的物理输出行上。在打印头内对奇数和偶数喷嘴作出的物理分离,以及在不同颜色的喷嘴之间所作出的分离都保证了它们会在页的不同行上产生点。在把数据载入打印头时这种相对差异必须加以考虑。行中的实际差异取决于打印头所使用的喷墨机构的特性。这种差异可以由变量D
1和D
2来定义,其中D
1是不同颜色的喷嘴之间的距离,D
2是相同颜色的喷嘴之间的距离。只考虑单独的一个段组,表32显示了在共用的SRClock的最初4个脉冲中传送给打印头的段n的点。
表32.传送到打印头的一个段的点的顺序 |
脉冲 |
点 |
颜色1行 |
颜色2行 |
颜色C行 |
1 |
800Sa |
N |
N+D1 b |
N+(C-1)D1 |
2 |
800S+1 |
N+D2 c |
N+D1+D2 |
N+(C-1)D1+D2 |
3 |
800S+2 |
N |
N+D1 |
N+(C-1)D1 |
4 |
800S+3 |
N+D2 |
N+D1+D2 |
N+(C-1)D1+D2 |
aS=段的数目bD1=一种颜色和下一种颜色的喷嘴之间的行数(可能=4-8)cD2=相同颜色的两排喷嘴之间的行数(可能=1) |
对于特定的段组中所有的800个SRClock脉冲也是如此。
9.2.2打印需要考虑的事项
关于打印,在低速打印模式我们使用每个段的4C个喷嘴,在高速打印模式我们使用每个段的8C个喷嘴。
由于确实有可能以任何方式来对段进行配线,我们只考虑所有的段同时进行喷射的情况。这是因为低速打印模式允许小打印头(例如2英寸和4英寸)进行低功率打印,而且控制器芯片的设计假定有充足的能力可用于大的打印尺寸(例如8-18英寸)。如果有特定的应用需要的话,改变打印头143中的连线以对喷射进行分组也是很简单的一件事。
当所有的段同时进行喷射时,低速打印模式中有4CS个喷嘴进行喷射,高速打印模式中有8CS个喷嘴进行喷射。因为所有的段同时打印,打印逻辑电路与部分9.1.2.2中所定义的是相同的。
因此,两种打印模式的时间选择为:
·低速情况下200μs打印一行(包括100个2μs的周期)
·高速情况下100μs打印一行(包括50个2μs的周期)
9.2.3反馈需要考虑的事项
一个段会产生几个反馈线,这在9.1.3节中进行了定义。这些反馈线是用于调整喷射脉冲的时间选择。因为一个打印头中聚集有多个段,因此要有效地把反馈线作为三状态总线来共用,使得每次这些段中只有一个可以把反馈信息送入反馈线中。
因为选择哪个段把反馈信息放在共用的Tsense,Vsense,Rsense,Wsense线上使用的是Color1Data线,用于装载数据的段组可用来选择作为反馈用的段。就象有G个SRClock线(每个线由同一个段组中的段共用)一样,也有G个SenseSegSelect线以相同方式被共用。当正确的SenseSegSelect线产生脉动时,设定了Color1Data位的段组中的段便开始把数据置入共用的反馈线上。通过让Color1Data位为0使先前在反馈方面有效的段必须失效,而且这个段可以在不同的段组中。因此当段组超过一个时,更改反馈段需要两步:使原来的段失效,使新段启动。
9.2.4打印头连线概述
本部分假定打印头143如前节所描述的那样由大量段构建成。并且假7定为了数据载入的目的,这些段被分成G个段组,最大的段组中有L个段。还假定打印头有C种颜色。还假定打印头143的喷射机制是所有的段同时喷射,并且每次只有一个段把反馈信息置入共用的三状态总线。假定了所有这些后,表33列出了从打印头处可用的外部连线。
表33.打印头连线 |
名称 |
引线 |
说明 |
ChromapodSelect |
3 |
选择哪个色度群喷射(0-4) |
NozzleSelect |
4 |
选择哪个群的喷嘴喷射(0-9) |
PodgroupEnable |
2 |
使群组喷射(选择:01,10,11) |
AEnable |
1 |
阶段组A的喷射脉冲 |
BEnable |
1 |
阶段组B的喷射脉冲 |
ColorData |
CL |
输入到段0到L—1的C个移位寄存器 |
SRClock |
G |
SRClock[N](ShiftRegisterClockN)上的一个脉冲把当前值从ColorData线装入段组N中的L个段 |
PTransfer |
1 |
从移位寄存器向内部的NozzleEnable位并行传送数据(每个喷嘴一个) |
SenseSegSelect |
G |
SenseSegSelect N上与Color1Data[n]上的数据为逻辑乘关系的脉冲选择用于段组N中段n的检测线 |
Tsense |
1 |
温度检测 |
Vsense |
1 |
电压检测 |
Rsense |
1 |
电阻检测 |
Wsense |
1 |
宽度检测 |
Logic GND |
1 |
逻辑地 |
Logic PWR |
1 |
逻辑电源 |
V- |
总线排 |
传动器地 |
V+ | |
传动器电源 |
TOTAL |
18+2G+CL |
10 MEMJET打印头接口
打印头接口(PHI)192是一种装置,通过它处理器181可用把要打印的点装载给Memjet打印头143,并控制实际的点打印过程。PHI 192包括:
·一个LineSyncGen单元(LSGU),它为多个芯片(允许并行打印和正面/反面打印)以及步进电机提供同步信号。
·一个Memjet接口(MJI),它把数据传送给Memjet打印头并控制打印过程中喷嘴的喷射顺序。
·一个行装载器/格式单元(LLFU),它把一给定打印行的点载入本机缓冲存储器并把它们格式化成Memjet打印头所要求的顺序。
PHI 192内的这些单元由大量的寄存器控制,这些寄存器是处理器181进行了编程的。另外,处理器181负责设置DMA控制器200内的适当参数,以用于从存储器向LLFU传送数据。这包括在一页的开始和结束过程中把白色(所有的0)载入到适当的颜色中以便该页有空白的边。
PHI 192能够处理多种打印头的长度和格式。对于很宽的操作定制,按如下方式确定PHI 192的参数:
表34.基本的打印参数 |
名称 |
说明 |
范围 |
MaxColors |
打印头中的颜色数目 |
1-4 |
SegmentsPerXfer |
每次传送写入的段的数目,等于最大的段组中所含段的数目 |
1-9 |
SegmentGroups |
打印头中段组的数目 |
1-4 |
PHI的内部结构容许最大有4种颜色,每次传送9个段,4次传送。向9个段传送4种颜色等于每次传送36个位,向9个段传送4次等于最大打印的行的长度为18英寸。一个18英寸4种颜色的打印头所打印的每行的点的总数为115,200(18×1600×4)。
其他一些设置的例子如表35所示。
表35.基本打印参数的设置实例 |
打印机长度 | 打印机类型 |
MaxColors |
SegmentsPerXfer |
SEGMENTGROUPS |
BitsPerXfer |
注解 |
4英寸CMY |
照片 |
3 |
8 |
1 |
24 | |
8英寸CMY |
A4/信纸 |
4 |
8 |
2 |
32 | |
8.5英寸CMY |
A4/全洇渗信纸 |
4 |
9 |
2 |
36 |
最后的传送未充分使用 |
12英寸CMY |
A4长/A3短 |
4 |
8 |
3 |
32 | |
16英寸CMY | |
4 |
8 |
4 |
32 | |
17英寸CMY |
A3长全洇渗 |
4 |
9 |
4 |
36 |
最后的传送未充分使用 |
18英寸CMY | |
4 |
9 |
4 |
36 | |
10.1打印头接口的框图
打印头接口192的内部结构如图39所示。
在PHI 192中有两个LSGU 316和318。第一个LSGU 316产生LineSync0,它用于在所有的同步芯片中控制Memjet接口320。第二个LSGU 318产生LineSyncl,它用于向纸张驱动步进电机发出脉冲。
芯片上的主/副引线通过主/副关系可以把多个芯片连接在一起以进行并行打印,正面/反面打印等等。当主/副引线连接到VDD上时,该芯片被认为是主,两个LineSyncGen单元316和318所产生的LineSync脉冲被传送到两个三状态LineSync共用线上(LineSycn0和LineSyncl,由所有的芯片共用)。当主/副引线连接到GND上时,该芯片被认为是副,两个LineSyncGen单元316和318所产生的LineSync脉冲就不能被传送到两个共用的LineSync线上。以此方式,主芯片的LineSync脉冲可以为所有相连的芯片上的PHI 192使用。
下面的部分分别详述了LineSyncGen单元316,318、行装载器/格式单元322和Memjet接口。
10.2 LineSyncGen单元
LineSyncGen单元(LSGU)316,318负责产生打印一页所需要的同步脉冲。LSGU 316和318分别产生一个外部LineSync信号以使行能够同步。当被告知“进行”时LGSU316和318内部的发生器便产生一个LineSync脉冲,然后每次如此多次循环,一直到该发生器被告知停止。LineSync脉冲定义了下一行的开始。
LineSync脉冲之间循环的确切数目是由“脉冲间周期”(CyclesBetweenPulses)寄存器所确定的,这种寄存器每个发生器有一个。它至少要足够长以使得一行打印(100μs还是200ms取决于打印速度是低还是高)而另一行载入,但是也可以按要求更长一些(例如,适应纸张传输线路的特殊要求)。如果CyclesBetweenPulses寄存器所设置的数目小于一行的打印时间,那么该页就不能完全打印出来,因为每个LineSync脉冲在特定的行完成打印之前都将抵达。
下面的接口寄存器包含在LSGU 316和318中:
表36.LineSyncGen单元寄存器 |
寄存器名称 |
说明 |
CyclesBetweenPulses |
在产生一个LineSync脉冲和下一个LineSync脉冲之间要等待的循环的数目。 |
Go |
控制LSGU当前是否产生LineSync脉冲。向该寄存器写入1便产生一个LineSync脉冲,并把CyclesBetweenPulses传送给CyclesRemaining,然后开始递减计数。当CyclesRemaining到0时,另一个LineSync脉冲又产生了,把CyclesBetweenPulses传送给CyclesRemaining,然后递减计数又再次开始。向该寄存器写入0停止递减计数,不再产生LineSync脉冲。 |
CyclesRemaining |
一种包含了在下一个LineSync脉冲产生之前剩余循环数目的状态寄存器。 |
LineSync脉冲并不从LGSU316,318处直接使用。只有主/副引线被设置为主时,才把LineSync脉冲置入三状态LineSync线上。因此LineSync脉冲只是以主芯片产生的形式来使用(副芯片产生的脉冲被忽略)。
10.3 Memjet接口
Memjet接口(MJI)320负责把数据传送到Memjet打印头143并控制打印过程中喷嘴的喷射顺序。
MJI 320只是一种状态机(见图40)它在9.2.1节、9.2.2节所描述的打印头装载和喷射顺序之后,包括部分9.1.4和部分9.1.5所描述的预热周期和清洗周期功能。高速和低速打印模式都可以使用,尽管MJI320总是同时使打印头中所有段的给定的喷嘴喷射(不存在一个段,然后是其他段的喷嘴的单独的喷射)。每种颜色的点数也由MJI 320保存。
MJI从2个数据源中选一种把数据载入打印头:
·全1。这意味着所有的喷嘴都将在一个连续的打印周期中喷射,这是在一个预热周期或清洗周期中为打印头装载的标准机制。
·从LLFU 322的Transfer寄存器中所保存的36位输入。这是打印一幅图像的标准方法。LLFU 322的36位值被直接送至打印头,并把1位“前进”控制脉冲送至LLFU 322。
MJI 320知道每页它必须打印多少行。当MJI 320被告知“进行”时,在它开始打印第一行之前它要等待一个LineSync脉冲。一旦它完成了对一行的装载/打印,在它开始打印下一行之前它一直等到下一个LineSync脉冲的到来。一旦规定数目的行被装载/打印完,MJI 320便停止,并不再理会任何其他的LineSync脉冲。
因此,MJI 320被直接连接到LLFU 322,LineSync0(在所有的同步芯片之间共用)和外部的Memjet打印头上。
MJI 320从LLFU 322处接收36位数据。在这36位数据中,只有与段的数目和颜色的数目相对应的位有效。例如,如果只有2种颜色,9个段,位0-1对于段0有效,位2-3无效,位4-5对于段1有效,位6-7无效等等。状态机并不关心那些位有效,那些位无效,它只是把这些位传送到打印头143。数据线和从MJI 320来的控制信号可以适当地与芯片的插脚引线连接,这里要使用芯片的应用范围所要求的尽可能少的引线(更多的信息见10.3.1节)。
10.3.1与打印头的连接
MJI 320与打印头143有大量的连线,包括:最大4种颜色,每次传送,它们被以同步的方式输入到最大4个段组中的最大各9个段中。从MJI 320出来的线可以直接连接到芯片的引线上,尽管并不是所有的线都总是引线。例如,如果芯片被专门设计只与8英寸CMYK打印机相连,每个传送脉冲只需要传送32位数据。因此只需要32个数据引线(每种颜色8个引线),并不需要36个引线。同样,只需要2个SRClock脉冲,因此只需要2个而不是4个引线来服务于不同的SRClock。如此等等。
如果芯片必须是完全通用的,那么从MJI 320来的所有的连线都必须与芯片上的引线相连(并由此连接到Memjet打印头143)。
表37列出了从MJI 320来的最多的连线,它们中有很多始终与芯片的引线相连。在引线编号可发生变化处,用脚注来解释引线的数目取决于什么。对输入和输出的检测与MJI 320有关。名称与打印头143上的引线连线相对应。
表37.Memjet接口连线 |
名称 |
引线 |
I/O |
说明 |
ChromapodSelect |
3 |
O |
选择哪个色度群喷射(0-4)。 |
NozzleSelect |
4 |
O |
选择哪个群的喷嘴喷射(0-9)。 |
PodgroupEnable |
2 |
O |
使群组喷射(选择:01,10,11)。 |
AEnable |
1 |
O |
群组A的喷射脉冲。在现在的设计中,所有的段同时喷射,尽管由能量和速度的原因可以加上多个AEnable线以划分多个段组的喷射顺序。 |
BEnable |
1 |
O |
群组B的喷射脉冲。在现在的设计中,所有的段同时喷射,尽管由能量和速度的原因可以加上多个BEnable线以划分多个段组的喷射顺序。 |
ColorlData[0-8] |
9a |
O |
向段0-8的ColorlData移位寄存器的输出。 |
Color2Data[0-8] |
9b |
O |
向段0-8的Color2Data移位寄存器的输出。 |
Color3Data[0-8] |
9c |
O |
向段0-8的Color3Data移位寄存器的输出。 |
Color4Data[0-8] |
9d |
O |
向段0-8的Color4Data移位寄存器 |
| | |
的输出。 |
SRClock[1-4] |
4e |
O |
SRClock[N](ShiftRegisterClock)上的一个脉冲把当前值从Color1Data[0-8],Color2Data[0-8],Color3Data[0-8],Color4Data[0-8]载入打印头上的段组N。 |
PTransfer |
1 |
O |
从移位寄存器向打印头内部的NozzleEnable位并行传送数据(每个喷嘴一个)。 |
SenseSegSelect[1-4] |
4f |
O |
SenseSegSelect[N]上与Color1Data[n]上的数据为逻辑乘关系的脉冲驱动打印头的段组N中段n的检测线。 |
Tsense |
1 |
I |
温度检测 |
Vsense |
1 |
I |
电压检测 |
Rsense |
1 |
I |
电阻检测 |
Wsense |
1 |
I |
宽度检测 |
TOTAL |
52 | | |
a尽管MJI有9条线可以用,但是芯片处引线的数目只反映一个段组中实际的段的数目。Color1Data的引线是必须有的,因为每个打印头都必须以至少一种颜色打印。b如果芯片被用于控制至少有2种颜色的打印头,只要把这些线转变成引线即可。尽管MJI有9条线可以用,但是Color2Data芯片处引线的数目只反映一个段组中实际的段的数目。c如果芯片被用于控制至少有3种颜色的打印头,只要把这些线转变成引线即可。尽管MJI有9条线可以用,但是Color3Data芯片处引线的数目只反映一个段组中实际的段的数目。d如果芯片被用于控制有4种颜色的打印头,只要把这些线转变成引线即可。尽管MJI有9条线可以用,但是Color4Data芯片处引线的数目只反映一个段组中实际的段的数目。e尽管MJI有4条线可以用,但是该芯片处引线的数目只反映实际段组的数目。至少需要1个引线,因为至少有1个段组(整个打印头)。f尽管MJI有4条线可以用,但是该芯片处引线的数目只反映实际段组的数目。至少需要1个引线,因为至少有1个段组(整个打印头)。 |
10.3.2喷射脉冲持续时间
AEnable和BEnable线上喷射脉冲的持续时间取决于墨水的粘度(它又取决于温度和墨水特性)和打印头143可以使用的能量。典型的脉冲持续时间范围是1.3至1.8μs。因此,MJI 320包含了一个可编程的脉冲持续时间表324(图41),该表由打印头143的反馈进行索引。表324的脉冲持续时间使得可以使用低成本的电源,并有助于保持墨滴更精确地喷射。
脉冲持续时间表324有256个项,该表由线326和328上的当前Vsense和Tsense设置分别作索引。高4位地址从Vsense处来,低4位地址从Tsense处来。每个项有8个位,代表了0-4ms范围内一个固定点的值。产生AEnable和BEnable线的过程显示在图41中。
256字节的表324由处理器181在打印第一页之前写入。如果要求的话,表324可以在各页之间进行更新。表324中每个8位的脉冲持续时间包括:
·用户的亮度设置(从页的说明出来)
·墨水的粘度曲线(从QA芯片来)
·Rsense
·Wsense
·Vsense
·Tsense
10.3.3点数
MJI 320保存着打印头143喷射的每种颜色的点数的计数。每种颜色的点数为一个32位的值,在处理器的控制下被单独清除。以32位长度,每个点的计数可以容纳最大覆盖率为17.8英寸×12英寸的页的点数,尽管在典型的使用情况下,点的计数是在每页或半页后被读取或清除。
点的计数由处理器181用来更新QA芯片312(见部分7.5.4)以预测何时墨盒32用光墨水。处理器181从QA芯片312处获知墨盒32中每种颜色的墨水的量。对墨滴进行计数就不再需要墨水传感器并且可防止墨道变干。每页之后把更新的墨滴计数写入QA芯片312。除非有足够的墨水剩下来,否则是不会打印新的一页的,这也使用户及时更换墨水,而不至于得到一页打印了半页而必须进行重新打印的废页。
颜色1的点计数器的布置如图42所示。其余的3个点计数器(Color1DotCount,Color2DotCount,Color3DotCount)在结构上是完全相同的。
10.3.4寄存器
处理器181通过一个寄存器装置与MJI 320进行通信。寄存器使得处理器181可以确定一次打印的参数并接收关于打印进程的反馈。
MJI 320中包含下列寄存器:
表38.Memjet接口参数 |
寄存器名称 |
说明 |
打印参数 |
SegmentsPerXfer |
每次传送要写入的段的数目。这也等于每次传送(在产生下一个前进脉冲之前)之间需要等待的循环的数目。每次传送有MaxColors×SegmentsPerXfer个有效位。 |
SegmentGroups |
打印头中的段组数。这也等于在单个点被写入打印头的每个段之前SegmentsPerXfer循环必须经过的次数。MJI执行此操作800次以把所有数据完全传送给打印头。 |
Printspeed |
是以低速还是以高速打印(确定打印过程中PodgroupEnable线上的值)。 |
NumLines |
要执行的装载/打印循环的次数。 |
监控打印(从处理器的观察点来看为只读) |
Status |
Memjet接口状态寄存器 |
LinesRemaining |
剩余的要打印的行数。只在Go=1时有效。起始值为NumLines,然后递减计数至0 |
TransfersRemaining |
在打印头被认为已经装载了当前行之前剩余的SegmentGroups传送的数目。从800开始,然后递减计数为0。只在Go=1时有效。 |
SegGroupRemaining |
在当前把1个点传送给每个段的设置中剩余的段组的数目。从SegmentGroups开始,然后递减计数为0。只在Go=1时有效。 |
SenseSegment |
在一次连续反馈SenseSegSelect脉冲过程中置入Color1Data线的9位值。9位中只有1位应当设置,它对应于(最大)9个段中的一个。关于如何确定要检测口那一个段组参见SenseSelect。 |
SetAllNozzles |
如果非0,则在Loaddots过程中写入打印头的36位的 |
|
值全为1,这样在连续的PrintDots过程中所有的喷嘴都会喷射。这是在预热和清洗循环中使用。如果为0,这是在实际打印规则图像的过程中的情况。 |
操作 |
Reset |
对该寄存器的写会重新设置MJI,停止任何的装载或打印过程,并给所有寄存器装入0。 |
SenseSelect |
以任何值对该寄存器的写都会清除状态寄存器中的反馈有效位,剩余的操作取决于LoadingDots和PrintingDots状态位的值。如果设定了状态位中的任一个,就会清除反馈位,再不会做任何事情。如果两个状态位都被清除,同时就会在所有ColorData位都为0的4个SenseSegSelect线上给出一个脉冲。此操作停止了任何现有的反馈。取决于写入SenseSelect寄存器的两个低位的二进制位,在SenseSegSelect1、SenseSegSelect2、SenseSegSelect3或SenseSegSelect4上给出一个脉冲,Color1Data位根据SenseSegment寄存器进行设定。一旦各种检测线被检测完毕,就把检测值置入Tsense,Vsense,Rsense和Wsense寄存器,并设定状态寄存器的反馈位。 |
Go |
把1写入该位便开始了LoadDots/PrintDots周期,该周期从等待第一个LineSync脉冲开始。总共打印NumLines行,每个行在接收到LineSync脉冲之后被装载/打印。每个行的装载包括SegmentGroups的36位传送。随着每个行的打印,LinesRemaining减少,TransfersRemaining被再次重新装载SegmentGroups。状态寄存器包含打印状态信息。一打印完NumLines,装载/打印过程便停止了,Go位被清除,任何其他的LineSync脉冲也不再被考虑。在最后的打印循环中,不再在打印头中载入任何东西。把0写入该位就停止了打印过程,但是并不清除任何其他寄存器。 |
ClearCounts |
如果位0,1,2或3分别被设定,对该寄存器的写便清除了Color1DotCount,Color2DotCount,Color3DotCount,Color4DotCount寄存器。因此,写入0没有效果。 |
反馈 |
Tsense |
从发送到段SenseSegment的最后的SenseSegSelect脉冲中只读取Tsense的反馈,并且只有在状态寄存器的FeedbackValid(反馈有效)位被设定时才有效。 |
Vsense |
从发送到段SenseSegment的最后的SenseSegSelect脉冲中只读取Vsense的反馈,并且只有在状态寄存器的FeedbackValid位被设定时才有效。 |
Rsense |
从发送到段SenseSegment的最后的SenseSegSelect脉冲中只读取Rsense的反馈,并且只有在状态寄存器的FeedbackValid位被设定时才有效。 |
Wsense |
从发送到段SenseSegment的最后的SenseSegSelect脉冲中只读取Wsense的反馈,并且只有在状态寄存器的FeedbackValid位被设定时才有效。 |
Color1DotCount |
只读取发送到打印头的32位计数的颜色1的点。 |
Color2DotCount |
只读取发送到打印头的32位计数的颜色2的点。 |
Color3DotCount |
只读取发送到打印头的32位计数的颜色3的点。 |
Color4DotCount |
只读取发送到打印头的32位计数的颜色4的点。 |
MJI的状态寄存器是一个16位寄存器,对其各位的说明如下:
表39.MJI状态寄存器 |
名称 |
位 |
说明 |
LoadingDots |
1 |
如果设定,MJI当前就载入点,TransferRemaining中为剩余的要传送的点的数目。如果清除,MJI当前就不载入点。 |
PrintingDots |
1 |
如果设定,MJI当前就打印点。如果清除,MJI当前就不打印点。 |
PrintingA |
1 |
当AEnable线上有脉冲时,设定该位。 |
PrintingB |
1 |
当BEnable线上有脉冲时,设定该位。 |
FeedbackValid |
1 |
当反馈值Tsense,Vsense,Rsense和Wsense有效时,设定该位。 |
保留 |
3 |
- |
PrintingChromapod |
4 |
它保持当前正被喷射的色度群。 |
PringtingDots状态位被设置 | | |
PrintingNozzles |
4 |
当PrintingDots状态位被设定时它保持当前正被喷射的喷嘴。 |
下面的伪代码描述了装载打印头打印单独的一行所需要的伪代码。注意装载只有在LineSync脉冲抵达之后从开始。这样是为了保证该行的数据由LLFU 322准备好并在第一次传送给打印头143时有效。
Wait for LineSync
For TransfersRemaining=800 to 0
For I=0 to SegmentGroups
If(SetAllNozzles)
Set all ColorDatalines to be 1(设定所有的ColorData线为1)
Else
Place 36 bit input on 36 ColorData lines(在36个ColorData
线上置入36位输入)
EndIf
Pulse SRClock[I]
Wait SegmentsPerXfer Cycles(等待SegmentsPerXfer循环)
Send ADVANCE signal (发送前进信号)
EndFor
EndFor
10.3.5预热和清洗循环
通过设定MJI 320中合适的寄存器,清洗和预热循环很简单就可以完成:
·SetAllNozzles=1
·设定PulseDuration(脉冲持续)寄存器为短持续时间(在预热模式的情况下),或设置为适当的墨滴喷射持续时间用于清洗模式。
·设定NumLines为喷嘴应当喷射的次数。
·设定Go位,然后当打印循环完成时等待Go位被清除。
还必须对LSGU 316,318进行编程,从而以正确的频率发送LineSync(行同步)脉冲。
10.4行装载器/格式单元
行装载器/格式单元(LLFU)322把一给定打印行的点载入局部缓冲存储器,并把它们格式化成Memjet打印头143所要求的顺序。它负责向Memjet接口320提供先期计算的NozzleEnable(喷嘴使能)位,以最终完成页的打印。
打印使用双重缓冲配置来准备和存取点位信息。在一行正被载入第一个缓冲器时,第二个缓冲器中先期载入的行正以Memjet点的顺序被读取。一旦通过Memjet接口320把整行从第二缓冲器传送到打印头143时,读和写过程就交换缓冲器。第一个缓冲器现在读,第二个缓冲器则载入新的一行数据。在整个打印过程中,这种操作重复执行,这一点从图43的示意图中看出来。
每个缓冲器的容量为14K字节以为4种颜色中18英寸的最大行长度提供条件(18×1600×4位=14,400字节)。缓冲器0(330-图44)和缓冲器1(332)的容量为28.128KB。由于这种设计允许打印的最大长度为18英寸,因此为了特定的应用为目标减小缓冲器的容量是没有价值的。
因为缓冲器330和332中有一个被读取,而另一个被写入,因此必须使用两套地址线。从共用数据总线186来的32位DataIn 334根据WriteEnables而被载入,而WriteEnables是状态机336响应DMA的肯定应答而产生的。
多路转接器338在缓冲器0和缓冲器1的两个4位输出之间作出选择,然后把结果发送给一个9入口×4位的移位寄存器340。在最多9个读周期之后(该数量取决于每次传送所写入的段的数目),只要MJI 320发出一个前进脉冲,从移位寄存器340来的36位的当前值便通过门电路进入36位传送(Transfer)寄存器342,此处它可以为MJI320使用。
注意:并不是所有的36位都是必须有效的。36位中有效的位的数目取决于打印头143中颜色的数目,段的数目以及段组的分离(如果多于一个段组)。更多信息参见9.2节。
一个L英寸C种颜色的打印头所打印的单独的一行包括1600L个C种颜色的点。以每个彩色点1位计算,单独的一个打印行包括1600LC个位。LLFU 322能够寻址的4种颜色的最大行尺寸为18英寸,这等于每行108,800位(14K节)。这些位必须以正确的顺序提供给MJI 320以进一步发送给打印头143。欲求更多与装载周期中点的装载顺序有关的信息,参见9.2.1节,但概括起来说,在SegmentGroups传送中有2LC个位被传送给打印头143,每次传送最大36位。每次向打印头143的特定段进行的传送都必须同时载入所有的颜色。
10.4.1缓冲器
两个缓冲器330和332中每一个都可以分解成4个子缓冲器,每种颜色1个。每个子缓冲器的容量为3600字节,足够以1600dpi的分辨率容纳18英寸的单颜色点。存储器一次可以访问32位,因此每个缓冲器有900个地址(需要10个位的地址)。
如图45所示,在每种颜色的缓冲器中,所有的偶数点都放置在奇数点之前。如果还有未用的空间,就把它放置在每种颜色缓冲器的末端。
实际使用的存储量与打印头的长度直接相关。如果打印头为18英寸,那么先有1800字节的偶数点,然后是1800字节的奇数点,没有未用的空间。如果打印头为12英寸,就有1200字节的偶数点,然后是1200字节的奇数点,有1200字节未用。
适于使用的子缓冲器的数目与打印头中的颜色数目直接相关。该数目典型地为3或4,尽管该系统比较适于使用在1或2种颜色系统中(有一些小的存储浪费)。在桌面印刷环境中,颜色的数目为4:Color1=青绿,Color2=品红,Color3=黄,Color4=黑。
地址译码电路是这样一种情况:在一给定的循环中,可以对所有4个子缓冲器进行单独的32位存取,或者是从所有4个缓冲器中读,或者是向4个缓冲器之一写。从每个颜色缓冲器读取的32位中只选择l位,这样总共形成4个输出位。图46显示了该过程。15位的地址使得可读取一个特定的位,方法是该地址的10个位被用于选择32个位,该地址的5个位被用于从这32个位中选择1个位。因为所有的颜色缓冲器共用该逻辑电路,因此单独的一个15位地址会给出总共4个输出位,每种颜色一个。每个缓冲器有其自己的WriteEnable(写使能)线,使得可以在一个给定的循环中把单独的一个32位值写入一个特定的颜色缓冲器中。32位DataIn(数据输入)被共用,因为只有一个缓冲器实际对数据进行时钟脉冲输入。
注意如果不考虑打印头中的颜色数目,在一给定的读循环中只产生4个位(每个颜色缓冲器产生一位)。
10.4.2地址形成
10.4.2.1读
用于读的地址的形成是简单明了的。每个周期中,产生一个位地址,该位地址被用于取4位代表一特定段的颜色,每种颜色1位。把当前的位地址加上400,就前进到下一个段的等效的点处。我们之所以加上400(而不是800),是因为奇数和偶数点在缓冲器中是分离开的。首先作此操作SegmentGroups组SegmentsPerXfer次以检索代表偶数点的数据(点数据每次传送给MJI36位),再作此操作SegmentGroups组SegmentsPerXfer次以载入奇数点。这一整个过程要重复400次,每次递增起始地址。这样,所有的点值就在400×2×SegmentGroups×SegmentsPerXfer次周期中以打印头所要求的顺序被传送。
另外,还产生TransferWriteEnable控制信号。由于LLFU 322在MJI 320之前启动,我们必须在MJI 320的前进脉冲之前传送出第一个值。我们还必须在第一个前进脉冲抵达时使下一个值准备就绪。这种解决方法是在SegmentsPerXfer周期之后把第一个值传送给Transfer寄存器,然后停止SegmentsPerXfer周期,等待前进脉冲启动下一个SegmentsPerXfer周期组。一旦第一个前进脉冲抵达,就使LLFU 322与MJI 320保持同步。但是,启动下一行的LineSync脉冲必须在LLFU322之后至少2SegmentsPerXfer周期内抵达MJI 320,以便最初的Transfer值有效,而且下一个32位的值也准备就绪被载入Transfer寄存器342。
下面的伪代码显示了读的过程。
DoneFirst=FALSE
For DotInSegment0=0 to 400
CurrAdr=DotInSegment0
XferRemaining=2×SegmentGroups
DotCount=SegmentsPerXfer
Do
V1=DotCount=0
TransferWriteEnable=(V1 AND NOT DoneFirst) OR ADVANCE
Stall=V1 AND (NOT TransferWriteEnable)
If(NOT Stall)
Shift Register=Fetch 4-bits from
CurrReadBuffer:CurrAdr
CurrAdr=CurrAdr+400
If(V1)
DotCount=SegmentsPerXfer—1
XferRemaining=XfersRemaining—1
Else
<dp n="d96"/>
DotCount=DotCount—1
EndIf
EndIf
Until(XfersRemaining=0)AND (NOT Stall)
EndFor
最后的传送可能并不被完全使用。在每次传送的段的数目并不能平均分配打印头中的实际段的数目时这种情况会发生。这种情况的一个例子是8.5英寸的打印头,它有17个段。每次传送9个段意味着最后的9个段中只有8个段有效。尽管如此,但是时间选择要求整个第9个段的值也要产生(尽管不使用它)。因此,实际的地址也是一个不需要关注的状态,因为并不使用该数据。
一旦该行打印完成,CurrReadBuffer值要由处理器进行切换。
10.4.2.2写
写的过程也是简单明了的。把4个DMA请求线输出到DMA控制器200。当请求被返回的DMA确认应答线所满足时,便选择适当的8位目的地址(15位输出地址的较低5位是不必考虑的值)并把肯定应答信号传送给正确缓冲器的WriteEnable控制线(“当前写”缓冲器就是“当前读”缓冲器)。10位目的地址是从4个当前地址中选择的,这4个当前地址每种颜色一个地址。随着DMA请求被满足,适当的目的地址要增加,对应的TransfersRemaining计数器要减值。只有当某种颜色剩余的传送数目不为0时,才设定DMA请求线。
下面的伪代码描述了写的过程:
CurrentAdr[1-4]=0
While(ColorXfersRemaining[1-4]are non-zero)
DMARequest[1-4]=ColorXfersRemaining[1-4]Not=0
If DMAAknowledge[N]
<dp n="d97"/>
CurrWriteBuffer:CurrentAdr[N]=
Fetch32-bit from data bus
CurrentAdr[N]=CurrentAdr[N]+1
ColorXferRemaining[N]=
ColorXfersRemaining[N]—1(floor 0)
EndIf
EndWhile
10.4.3寄存器
下面的接口寄存器包含在LLFU 322中:
表40.行装载/格式单元寄存器 |
寄存器名称 |
说明 |
SegmentsPerXfer |
每次传送之前都必须装载点的段的数目。它的最大值为9。 |
SegmentGroups |
打印头中段组的数目。它的最大值为4。 |
CurrentReadBuffer |
当前被读取的缓冲器。当缓冲器0被读取时,缓冲器1被写入,反之亦然。这两个缓冲器应由MJI发出的每个AdvanceLine脉冲进行切换。 |
Go |
位0和1分别控制读和写过程的开始。向适当的位写入一个非0值便会开始该过程。 |
Stop |
位0和1分别控制读和写过程的停止。向适当的位写入一个非0值便会停止该过程。 |
Stall |
这个只读的状态位来自LLFU的停止标志。当设定了写Go位时Stall位为有效。Stall值为1意味着LLFU正等待从MJI来的前进脉冲继续。一旦设定了Stall位,处理器便可以安全启动LSGU。 |
ColorXfersRemaining[1-4] |
剩余的要读入特定的Color[N]缓冲器的32位传送的数目。 |
10.5控制打印
当控制打印时,处理器181在读模式对LLFU 322进行编程并启动LLFU 322以保证该页的第一行被传送到缓冲器。当中断从DMA控制器220抵达时,处理器181可以交换LLFU缓冲器330,332,并对MJI 320进行编程。然后处理器181在读/写模式下启动LLFU 322,并且还启动MJI 320。然后处理器181应当等待足够长的时间以确保其他相连的打印机控制器也启动了它们的LLFU和MJI(如果没有其他的打印机控制器,处理器181必须等到LLFU 322的Stall位被设定,一段持续2个SegmentsPerXfer周期的时间)。再之后,处理器181对LGSU316,318进行编程以进行同步打印。当中断从DMA控制器200抵达时,处理器181对DMA通道进行重新编程,交换LLFU缓冲器330,332,并在读/写模式下重新启动LLFU 322。一旦LLFU 332有效地充填了其管线,它就将停止一直到MJI 320的下一个“前进”脉冲抵达。在打印过程中,没有必要触动MJI 320。
如果由于某种原因,在各线之间相互联系的阶段处理器181想对MJI 320或LLFU 322寄存器作出一些更改,它应当通过对MJI 320的状态位和LLFU 322的Go位的轮询,确认当前的行已经完成了打印/装载。
11一般的打印机驱动程序
11.1图形和图像模型
假定打印机驱动程序与主机图形系统紧密结合,这样打印机驱动程序对于不同的图形和图像操作特别是复合操作和文本操作可以提供设备特殊的处理。我们假定主机提供对颜色管理的支持,这样独立于设备的颜色就可以在用户选择的特殊的CePrint专用的ICC(国际颜色协会)颜色配置文件的基础上以标准方式转换为专用的CePrint CMYK颜色。当用户指定了打印机中的输出介质(例如,普通纸张,铜版纸,透明纸等等)时,颜色配置文件通常由用户作出肯定的选择。送往打印机10的页的说明总要包括设备特定的CMYK颜色。
假定主机图形系统能够把图像和图形转换成打印机驱动程序所指定的分辨率,但是还假定该系统允许打印机控制着色的文本。特别地,图形系统还向打印机驱动程序提供足够的信息使其能够以比指定的设备分辨率更高的分辨率来着色和定位文本。
假定除了允许打印机驱动程序控制实际的复合,主机图形系统需要以指定的设备分辨率随机访问连续色调页缓冲器,在缓冲器中它可以复合图形和图像对象,也就是说,它希望打印机驱动程序管理页缓冲器。
11.2两层页缓冲器
打印机的页说明包含一个267ppi的连续色调层和一个800dpi的黑色层。黑色层在概念上是在连续色调层之上,也就是说,黑色层由打印机复合在连续色调层之上。因此打印机驱动程序保持了一个页缓冲器,该缓冲器又相应地包含了一个介质分辨率的连续色调层和一个高分辨率的黑色层。
图形系统把对象在页缓冲器中按从下到上的顺序进行转换和复合,也就是说,后来的对象遮掩正面的对象。当只有一层时,这很自然起作用,但是当有两层并且这两层以后还要进行复合时,就不是如此。因此有必要检测何时放置在连续色调层上的对象遮掩黑色层上的对象。
当检测到遮掩情况时,被遮掩的黑色像素要与连续色调层进行复合并从黑色层上移走。然后把被遮掩的对象向下放置在连续色调层上,该对象很可能以一定方式与黑色像素相互作用。如果遮掩对象的复合方式是这样一种情况,可能不与背景相互作用,那么只需把黑色像素去掉而不必把它与连续色调层进行复合。当然,实际上连续色调层与黑色层之间基本上没有相互作用。
打印机驱动程序为图形系统指定规定的页分辨率267ppi。如果可能,打印机驱动程序依赖于图形系统把图像和图形对象着色为267ppi的像素水平,只有黑色文本例外。打印机驱动程序产生所有的文本着色请求,以800dpi的分辨率检测并着色黑色文本,但是返回给图形系统非黑色文本的着色请求,以在267ppi的分辨率下进行着色。
理想地来说,图形系统和打印机驱动程序应管理独立于设备的RGB中的颜色,推迟向特殊设备的CMYK模式转换一直到该页结束并已准备好向打印机发送。这减少了页缓冲器的要求并使得复合更加合理。在CMYK颜色空间进行复合不理想。
最终,图形系统让打印机驱动程序把每个转换对象复合在打印机驱动程序的页缓冲器中。每个这样的对象使用24位的连续色调RGB并且具有明确的(或不明显的暗度)暗度通道。
打印机驱动程序把两层的页缓冲器保持在三个部分内。第一部分是中间分辨率(267ppi)连续色调层。这包含一个24位的RGB位图。第二部分为中间分辨率的黑色层。这包括一个8位的不透明位图。第三部分为一高分辨率(800dpi)的黑色层。这包括一个1位的不透明位图。中间分辨率黑色层是高分辨率不透明层的二次抽样形式。实际上,假定低分辨率是高分辨率的整数因子n倍(例如,n=800/267=3),每个低分辨率的暗度值都可以通过取相应的n×n个高分辨率的暗度值的平均值得到。这与箱式过滤的二次抽样相对应。对黑色像素的二次抽样有效地避免了高分辨率黑色层中易混淆的边,因此当连续色调层在随后进行JPEG压缩和解压缩时也会减小环状假象。
页缓冲器的结构和尺寸如图47所示。
11.3复合模型
为了讨论页缓冲器复合模型的目的,我们定义了如下变量。
表41复合变量 |
变量 |
说明 |
分辨率 |
格式 |
n |
高分辨率比例系数的平均 |
— |
— |
CBgM |
背景连续色调层颜色 |
中间 |
8位颜色成分 |
CObM |
连续色调对象颜色 |
中间 |
8位颜色成分 |
áObM |
连续色调对象暗度 |
中间 |
8位暗度 |
áFgM |
中间分辨率的前景黑色层暗度 |
中间 |
8位暗度 |
áFgH |
前景黑色层暗度 |
高 |
1位暗度 |
áTxH |
黑色对象暗度 |
高 |
1位暗度 |
当暗度为áTxH的黑色对象与黑色层复合在一起时,黑色层按如下公式进行更新:
αFgH[x,y]←αFgH[x,y]∨αTxH[x,y] (规则1) (规则2)
对象暗度只是与黑色层暗度进行了逻辑或操作(规则1),中间分辨率黑色层的对应部分则从高分辨率黑色层进行重新计算(规则2)。
当一个颜色为CObM,暗度为αObM的连续色调对象与连续色调层进行复合时,连续色调层和黑色层按如下方式进行复合:
CBgM[x,y]←CBgM[x,y](1-αFgM[x,y]如果αObM[x,y]>0 (规则3)
αFgM[x,y]←0 如果αObM[x,y]>0 (规则4)
αFgH[x,y]←0 如果αObM[x/n,y/n]>0 (规则5)
CBgM[x,y]←CBgM[x,y](1-αObM[x,y])+CObM[x,y]αObM[x,y](规则6)
无论连续色调对象在何处遮掩了黑色层,即使是未完全遮掩,受到影响的黑色层像素也要从黑色层被推向连续色调层,也就是,与连续色调层进行复合(规则3),从黑色层去除(规则4和规则5)。然后连续色调对象与连续色调层进行复合(规则6)。
如果连续色调对象像素完全不透明(也就是αObM[x,y]=255),那么就没有必要把相对应的黑色像素推入背景连续色调层(规则3),因为背景连续色调像素随后将被前景连续色调像素完全除去(规则6)。
11.4页压缩和传送
一旦页着色完成,打印机驱动程序在图形系统所提供的颜色管理功能的帮助下把连续色调层着色为特殊的CePrint CMYK。
然后打印机驱动程序把黑色层和连续色调层压缩并封装成一个CePrint页的说明,如6.2节所述。这种页的描述通过假脱机程序被传送给打印机10。
注意,黑色层是作为一组1位的暗度值来处理的,但是却是作为一组1位黑色值被传送给打印机10的。尽管这两种说明不同,但是它们共用相同的表达式,因此不需要进行数据转换。
正向离散余弦变换(DCT)是JPEG压缩中价值最高的部分。在当前高质量的软件实现的情况下,每个8×8的块的正向DCT需要12个整数乘和32个整数加。在典型的现代多用途处理器上,一个整数乘需要10个周期,一个整数加需要2个周期。这等于每个时钟的总体代价为184个周期。
26.4MB的连续色调层包含432,538个JPEG块,这样它的总共的正向DCT的代价为80M个周期。以150MHz的频率计算,这等于0.5秒,这是每页所允许的2秒转换时间的25%。
有CE导向的处理器可能有DSP支持,在这种情况下,单周期乘法的存在使得JPEG的压缩时间可以忽略。
11.5分区段输出
打印机控制协议支持把页作为一系列区段传送给打印机。如果图形系统也支持这种分区段输出,那么这种方法使得打印机驱动程序通过每次把图像转换一个区段从而减少了对其存储器的要求。但是应当注意,每次着色一个区段比一次着色整个页要更昂贵,因为,跨越多个区段的对象必须处理多次。
尽管在打印机驱动程序中分区段转换可用于减少存储器的要求,但是仍然需要可用于两个区段的缓冲器。一个缓冲器用于被传送到打印机10的区段,另一个缓冲器是被转换的区段所要求的。如果主处理器与打印机之间连接足够快的话,单独一个缓冲器就可以满足需要。如果系统有磁盘驱动器的话,被传送给打印机的区段也可以存储在磁盘上,只是在传送时需要一个时钟接一个时钟地把其载入内存。
12.WINDOWS 9X/NT/CE打印机驱动程序
12.1 Windows 9x/NT/CE打印系统
在Windows 9x/NT/CE打印系统中,打印机为图形设备,应用程序通过图形设备接口(GDI)与其进行通信。打印机驱动程序图形DLL(动态链接库)执行GDI所提供的各种图形功能的与设备相关的方面。
假脱机程序处理向打印机传送的页,它也可以驻留在应用程序可请求打印的另一台不同的机器上。它通过端口监视器向打印机传送页,端口监视器处理与打印机的物理连接。可选的语言监视器是打印机驱动程序的一部分,它为与打印机进行的通信加上附加的协议,而且它还代表假脱机程序对来自打印机的状态响应进行解码。
打印机驱动程序用户接口DLL实现用于编辑特殊的打印机性能并汇报特殊的打印机事件的用户接口。
Windows 9x/NT/CE打印系统的结构如图48所述。
打印机驱动程序语言监视器和用户接口DLL必须执行第6节所述的打印机控制协议的相关方面。这一部分的剩余部分描述了打印机驱动程序图形DLL的设计,应当结合适当的Windows 9x/NT/CE DDK文献来阅读。
12.2 Windows 9x/NT/CE图形设备接口(GDI)
GDI提供的功能使得应用程序能够在设备表面上画图,也就是,典型地一种对显示屏或打印页的概括。对于光栅设备而言,设备表面在概念上是一幅彩色位图。应用程序可以在设备表面上以一种与设备独立的方式,也就是独立于设备的分辨率和颜色特性的方式进行作图。
应用程序可以任意访问整个设备表面。这意味着如果存储空间有限的打印机设备需要分区段输出的话,那么GDI必须缓存整个页的GDI命令,并把它们按顺序重新放入每个区段中。尽管这可以为应用程序带来极大的灵活性,但是相反它也会影响性能。GDI支持颜色管理,由此应用程序所提供的独立于设备的颜色显然可以根据设备标准的ICC(国际颜色协会)颜色配置文件转换为与设备相关的颜色。打印机驱动程序还可以根据用户从驱动程序管理的打印机性能表单上所选择的纸张类型启动不同的颜色配置文件。
GDI支持线和样条轮廓图(路径)、图像和文本。轮廓图包括轮廓字体图示符,可以用笔画也可以用位图的刷子模式来填充。图形和图像可以用几何学进行转换并且与设备表面的内容进行复合。Windows95/NT4只提供布尔复合算子,Windows98/NT5则提供了更合适的alpha混合操作。
12.3打印机驱动程序图形DLL
在Windows9x/NT/CE操作系统下,光栅打印机在理论上可以使用标准打印机驱动程序的部件,这使得打印机驱动程序的开发变得无足轻重。这依赖于能够把设备表面模拟成简单的位图。但是这样做的困难在于文本和图像必须以同样的分辨率进行着色。这要么损坏文本分辨率,要么产生更多的输出数据,总之都危害性能。如前所述,CePrint的方法是以不同的分辨率来转换黑色文本和图像,然后优化它们各自的复制品。因此打印机驱动程序根据部分11所述的一般的设计来执行其功能。
因此驱动程序如11.2节所述保持了一个两层三部分的页缓冲器,这意味着打印机驱动程序必须接管对设备表面的管理,这反过来也意味着它必须间接管理所有GDI对设备表面的访问。
12.3.1管理设备表面
图形驱动程序必须支持大量的标准功能,这些功能包括下面的:
表42.标准图形驱动程序接口功能 |
功能 |
说明 |
DrvEnableDriver |
驱动程序图形DLL中的初始入口点。返回驱动程序所支持功能的地址。 |
DrvEnablePDEV |
产生物理设备的逻辑表示,驱动程序可以把图形表面与其联系起来。 |
DrvEnableSurface |
产生要画的表面,与给定的PDEV相关。 |
DrvEnablePDFV通过所返回的DEVINFO结构的flGraphicsCaps项向GDI表明驱动程序的图形转换能力。这在下面进一步进行讨论。
DrvEnableSurface产生的设备表面包括两个概念上的层和三个部分:267ppi的连续色调层24位RGB颜色,267ppi的黑色层8位暗度,800dpi的黑色层1位暗度。压缩了这两层的虚拟设备表面有指定的267ppi的分辨率,因此这也是GDI操作出现的分辨率。
尽管总的页缓冲器需要大约34MB的存储空间,但页存储器的容量却可以通过一次把页转换为一个区段而被任意减少,12.3.4节对此进行了说明。
特殊的打印机图形驱动程序必须也支持下面这些功能:
表43.所需要的打印机驱动程序的功能 |
功能 |
说明 |
DrvStartDoc |
执行任何文件开始处理。 |
DrvStartPage |
处理新的一页的开始。 |
DrvSendPage |
通过假脱机程序把当前页传送给打印机。 |
DrvEndDot |
执行任何文件的结束处理。 |
DrvStartDoc把“文件开始”命令传送给打印机,DrvEndDoc发出结束文件命令。
DrvStartPage把“页开始”命令以及页的首标传送给打印机。
DrvSendPage利用GDI所提供的颜色管理功能把连续色调层由RGB转换为CMYK,压缩连续色调和黑色层,把压缩的页作为单独的一个区段传送给打印机(在页的区段命令中)。
DrvStartPage和DrvSendPage都使用EngWritePrinter通过假脱机程序把数据传送给打印机。
管理设备表面以及间接管理GDI对其的访问意味着打印机驱动程序必须支持下面的附加功能:
表44.用于由设备管理的表面所需要的图形驱动程序的功能 |
功能 |
说明 |
DrvCopyBits |
完成由设备所管理的光栅表面和GDI管理的标准格式的位图之间的转换 |
DrvStrokePath |
画一路径。 |
DrvPaint |
给一特定区域上色。 |
DrvTextOut |
在特定的位置着色一组图示符。 |
复制图像、画路径和填充区域都发生在连续色调层上,而转换纯黑文本则发生在二值黑色层上。另外,转换非黑色文本也发生在连续色调层上,因为它不被黑色层支持。反过来,用纯黑色画或填充却可以发生在黑色层上(如果我们这么选择的话)。
尽管打印机驱动程序必须包括上述的功能,但是它可以将用于连续色调层的功能调用发送(punt)回GDI所执行的相应功能,因为连续色调层是标准格式的位图。对于每个DrvXxx功能,GDI提供相对应的EngXxx功能。
如部分11.2所述,当指定为连续色调层上的对象遮掩了黑色层上的像素时,被遮掩的黑色像素在连续色调对象与连续色调层复合之前必须由黑色层转印到连续色调层上。这一步工作的关键在于:在遮掩被送回GDI之前,在连接的调用中对其进行检测和处理。这涉及到从几何学角度确定连续色调对象的像素接像素的暗度,并利用这种暗度把黑色像素从黑色层向连续色调层有选择性地传送,这一点在部分11.2中进行了描述。
12.3.2确定连续色调对象的几何结构
在每个连续色调对象被转换之前确定其几何结构并由此有效确定它遮掩了那些黑色像素是有可能的。在DrvCopyBits和DrvPaint情况下,几何结构由clip对象确定(CLIPOBJ),这些clip对象可以作为一组矩形来计算。
在DrvStrokePath的情况下,事情更复杂。DrvStrokePath既支持直线和贝赛尔样条曲线段,也支持单像素宽和几何宽的线。第一步是通过清除驱动程序中DEVINFO结构的flGraphicsCaps项中相对应的能力标志(GCAPS_BEZIERS和GCAPS_GEOMETRICWIDE)把贝赛尔样条曲线段和几何宽的线的复杂性回避掉。这会造成GDI把这些调用作为一组对DrvPaint更简单的调用而重新形成。通常,GDI会给驱动程序机会来增加高级别的能力,并且去模拟驱动程序没有提供的性能。
剩下的是简单地确定单像素宽的直线的几何结构。这种线可以是实线或装饰性的。在后面这一种情况中,线的类型由特定的线的属性(LINEATTRS)中的式样阵列来确定。该式样阵列指定该线在沿其长度方向上不透明和透明部分之间如何变化,并且因此还支持各种虚线效果等等。
当刷子为纯黑色时,也可以把直线有效地着色到黑色层上,当然所增加的宽度也必须具备800dpi的分辨率。
12.3.3文本着色
在DrvTextOut的情况下,事情也是很复杂的。首先,不透明背景,如果有的话,要象任何在连续色调层上的填充一样进行处理(见DrvPaint)。如果前景刷不是黑色,或者混合模式并不十分透明,或者字体不能进行缩放,或者字体只显示出轮廓线,那么就向EngTextOut发出调用,并把它们应用于连续色调层。但是在这些调用被发出之前,驱动程序通过获得每个图示符的位图(通过FONTOBJ_cGetGlyphs)便可以确定它们的几何结构,并且还对黑色层作出例行模糊(obscuration)检测。
如果不允许punt DrvTextOut调用(文档模糊),那么驱动程序应当禁止复杂的文本操作。这包括禁止轮廓画(通过清除GCAPS VECTOR FONT性能标志),禁止复杂的混合模式(通过清除GCAPS ARBMIXTXT性能标志)。如果前景刷为黑色不透明的,字体可缩放但不能画,那么就可以在黑色层上着色图示符。在这种情况下,驱动程序通过获得图示符的轮廓(再次通过FONTOBJ_cGetGlyphs,但是作为一个PATHOBJ)来确定每个图示符的几何结构。然后驱动程序以800dpi的分辨率把每个图示符从其轮廓进行转换,并把它写入黑色层。尽管轮廓的几何结构使用设备的坐标系(也就是以267ppi的分辨率),但是坐标系为固定点的格式,并且有足够多的分数精度以进行高分辨率的着色。
注意,如果指定的话,要把删除线和下划线矩形加入图示符几何结构中。
驱动程序必须设定DEVINFO中的GCAPS_HIGHRESTEXT标志以请求由GDI以高精度固定点格式提供图示符的位置(再一次以267ppi的设备坐标系),以在800dpi分辨率的情况下进行更精确地定位。驱动程序还必须提供DrvGetGlyphMode功能的执行,以便向GDI表明图示符应当作为轮廓图而不是位图来存储。理想的情况是,驱动程序在考虑到效率和存储容量许可情况下应当存储被转换的图示符位图。只有小于一定点的大小的图示符才应当存储。
12.3.4分区段输出
如部分6所述,打印机控制协议通过把页的说明划分为一个页标题和大量的页区段而支持分区段输出。GDI支持向打印机的分区段输出以为打印机驱动程序和内部缓冲器存储器容量有限的打印机提供条件。
GDI可以处理分区段输出而不用应用程序介入。GDI只是简单地记录下元文件中应用程序所执行的所有图形操作,然后把整个元文件划分为区段重新放入打印机驱动程序中。照例,打印机驱动程序对当前区段中的图形操作进行剪裁。如果应用程序注意到驱动程序的光栅性能(当与RASTERCAPS一起被调用时由GetDeviceCaps返回)中的RC BANDING位并且只执行与每个区段相关的图形操作时,分区段输出会更有效。
如果因为存储空间有限而需要进行分区段输出,那么打印机驱动程序必须通过调用DrvEnableSurface中的EngMarkBandingSurface来进行分区段。它还必须支持下面的附加功能:
表45.所要求的打印机驱动程序的功能 |
功能 |
说明 |
DrvStartBanding |
使驱动程序为分区段做好准备并返回第一个区段的起始地址。 |
DrvNextBand |
把当前的区段传送给打印机并返回下一个区段的起始地址(如果有)。 |
象DrvSendPage一样,DrvNextBand利用GDI提供的颜色管理功能把连续色调层从RGB转换为CMYK,压缩连续色调层和黑色层,并把压缩的页区段传送给打印机(在页区段命令中)。
它利用EngWritePrinter通过假脱机程序把区段数据传送给打印机。