SM502双屏显示驱动开发
理解LCD屏幕的驱动原理与调试过程,示例的驱动IC为GC9308,展示整个屏幕的驱动过程。

理解LCD屏幕的驱动原理与调试过程,⽰例的驱动IC为GC9308,展⽰整个屏幕的驱动过程。
起因最近拿到了⼀个⽐较新的驱动 IC 的 LCD 了,此前 K210 上⾯使⽤的都是 ST7789V ILI9342C SH1106 这类驱动 IC 的屏幕模块。
这次来了⼀个 GC9308 ,我想我需要认识⼀下屏幕驱动的整体架构,也就是拿起数据⼿册当作学习教材来学了,实际上学完以后,懂了以后都不难,重点在如何总结这些屏幕的驱动逻辑,以此打下往后的屏幕驱动理解基础。
我需要读懂图像的⼆进制定义、还有传输⽅式,我找了⼀本中⽂的屏幕数据⼿册来读,了解⼀下相关的流程和细节本⽂我只会交待软件层⾯的理解,硬件⽅⾯的定义和特性我⽆法给出准确的解释,姑不会提及。
屏幕的发展历程让我们看⼀下这个⼤哥的故事,就很好的说明了这段 LCD MCU 发展的历史。
记得在很早的时候,那时候还都是FSTN的显⽰屏满天飞的时候(也是⼩弟刚刚毕业开始作⼿机的时候)。
LCD的驱动电路有很多是两⽚芯⽚的,⼀⽚LCDC,⼀⽚LCD Driver,⼀般的LCDC⾥⾯有⼀个display的buffer。
LCDDriver是电路驱动液晶显⽰部分的电路,没有什么好讲的。
更早的时候,LCD上就⼀⽚LCDDriver就⾏了,程序员需要控制两个(H,V)场扫描信号,⽽且程序员希望在某个坐标显⽰,都需要编程控制驱动电路来实现,后来发现显⽰屏越来越⼤,⽽MCU以及程序员没有这个能⼒和精⼒来对LCD进⾏这类的同步控制,于是LCDC就诞⽣出来承担起这些个功能。
后来加上了buffer,就是说程序员可以把⼤批的显⽰内容以显⽰矩阵(display matrix)的形式写到buffer⾥,让LCDC来读取buffer⾥的数据再由LCDDriver显⽰到显⽰屏上。
后来这个buffer越来越⼤,除了显⽰矩阵以外还放很多命令,所以也不能⽼把它笼统的叫buffer啊,所以就对放显⽰矩阵的存储空间有了⼀个专⽤的名字叫做GRAM。
串口屏开发流程

串口屏开发流程
串口屏是一种通过串口与外部控制器通信的显示设备。
它具有简单、
方便、易于控制等诸多优点,因此在各种控制场合得到了广泛的应用。
下面来介绍一下串口屏的开发流程。
1. 硬件设计
串口屏的硬件设计需要考虑到多个方面,如选择合适的显示屏、控制
芯片、电源管理芯片等。
同时还需要设计一套可靠的调试接口,以方
便后续的调试工作。
2. 软件开发
串口屏的软件开发需要实现以下几个方面:
(1)串口通讯模块:实现串口的初始化、数据发送、数据接收等功能。
(2)显示模块:实现显示屏的初始化、显示数据的发送、屏幕亮度的
控制等功能。
(3)图形模块:实现在屏幕上绘制图形、图像等内容的功能。
(4)字库模块:实现字符显示及汉字、各类图标等显示的功能。
(5)触控模块:实现触控输入的监测和处理。
3. 调试测试
在软件开发完成后,需要进行调试测试。
测试应涉及到功能测试、性能测试、稳定性测试等多个方面。
测试的结果将决定软件是否可用,因此需要认真对待。
4. 系统集成
串口屏开发完成后,需要将它集成到系统中。
在集成时,需要考虑到串口屏的使用场合、接口方式、命令协议等因素。
同时还需要对系统进行一定的调试和优化,使其与串口屏协同工作。
综上所述,串口屏开发需要考虑到多个方面,包括硬件设计、软件开发、测试调试等。
只有在每个环节都做到尽善尽美,最终才能开发出一款高品质、稳定可靠的串口屏设备。
tm1650驱动程序案例

tm1650驱动程序案例TM1650是一个常用的LED显示驱动芯片,常用于制作LED显示屏。
以下是一个简单的TM1650驱动程序案例,以C语言编写:```cinclude <>include <>define uchar unsigned chardefine uint unsigned intsbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit TM1650_RS=P2^0;sbit TM1650_RW=P2^1;void delay(uint z) {uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void Write_Com(uchar com) {LSA=0;LSB=0;LSC=0;P0=com; //先写地址,后写数据delay(5);LSB=1; //将LSB置1,再改变LSA即可写入数据 delay(5);LSA=1; //先写地址,后写数据delay(5);LSC=1; //先写地址,后写数据}void Write_Data(uchar date) {P0=date; //向指定的地址写入数据delay(5);}void InitTM1650() { //初始化TM1650芯片Write_Com(0x38); //设置基本模式Write_Com(0x0C); //设置段选位反转Write_Com(0x06); //开显示,光标位移到右端 Write_Com(0x01); //清除显示,光标移到最左边}void main() { //主函数InitTM1650(); //初始化TM1650芯片while(1) { //循环显示数字Write_Com(0x80); //设置段选位为第一段Write_Data('1'); //向第一段写入数字'1'delay(50); //延时一段时间Write_Com(0x9F); //设置段选位为第五段Write_Data('2'); //向第五段写入数字'2'delay(50); //延时一段时间Write_Com(0xDF); //设置段选位为第七段Write_Data('3'); //向第七段写入数字'3'delay(50); //延时一段时间}}```。
Windows 驱动程序开发指导说明书

课程内容驱动基本概念介绍驱动核心代码分析WDM和WDF介绍Windows 10通用驱动平台驱动程序是一个软件模块,可以使操作系统和硬件设备进行交互驱动程序是操作系统的一个扩展驱动程序一般是由硬件的设计者或厂商进行编写Microsoft已经为符合公共设计规范的硬件设备提供了内置的驱动程序可执行文件,扩展名是.exe入口函数是Main()Main()函数完成大部分工作应用程序完成工作后返回,并释放内存空间在用户态运行可执行文件,扩展名是.sys入口函数是DriverEntry()DriverEntry()不会做很多工作,只是初始化驱动驱动其他部分会注册很多回调函数,会被系统的不同模块调用驱动不会返回,会一直存在直至被显示的释放在内核态或用户态运行Driver StacksPDO位于驱动栈的最底层,和总线驱动相关联当总线驱动被加载时,它会枚举所有挂载在总线上面的设备并请求设备所需要的资源每个设备都有自己对应的PDOPnP管理器会确定每个设备的驱动并在设备的PDO 之上构建适当的设备栈设备栈的核心部分,FDO和设备功能驱动相关联设备功能驱动完成Windows和设备交互的核心功能对上向应用程序和服务提供上层接口对下为设备或其他驱动提供数据交换的接口一个设备栈可以包含多个FiDO,可以在FDO之上或之下每个FiDO和一个过滤驱动相关联,FiDO是可选的通常的目的是修改一些在设备栈中传输的I/O请求,例如可以加密和解密读写请求当一个新设备被插入到系统后,系统总线驱动会向PnP管理器报告这个新设备PnP管理器通过总线驱动查询这个设备的更多信息,比如设备ID和设备所需要的资源PnP管理器利用这个信息去查找是否有有对应的驱动在本地或WU(Windows Update)上面一旦查找到设备对应的驱动,Windows便会安装并加载这个驱动加载驱动到地址空间解析驱动中引入的函数-调用其他模块调用驱动的入口函数(DriverEntry()),因此驱动可以注册回调函数调用AddDevice(),驱动此时可以创建一个“设备对象”,并将这个对象加入到设备栈中所有的事物在驱动框架中都是用对象呈现的(驱动,设备,请求等等)对象拥有属性,方法和事件WDF 对象方法属性事件操作对象的函数被WDF 框架调用用于通知某些事件设置或获取单个属性值的方法Driver (WDFDRIVER)Device (WDFDEVICE)Device (WDFDEVICE)Queue (WDFQUEUE)Queue (WDFQUEUE)……ObjectOperation方法:Status = Wdf Device Create ();属性:Cannot failWdfInterrupt Get Device();WdfInterrupt Set Policy();Can fail:Status = WdfRegistry Assign Value();Status = WdfRegistry Query Value();Status = WdfRequest Retrieve InputBuffer();回调事件:PFN_WDF_INTERRUPT_ENABLE EvtInterruptEnable初始化宏:WDF_XXX_CONFIG_INITWDF_XXX_EVENT_CALLBACKS_INIT当驱动被加载时,DriverEntry是第一个被操作系统调用的函数WdfDriverCreate( RawDriverObject, […] , attributes, &driver )NTSTATUS DriverEntry(_In_PDRIVER_OBJECT DriverObject ,_In_PUNICODE_STRING RegistryPath ) {[…]// Create WDF Driver ObjectWDF_OBJECT_ATTRIBUTES_INIT(&attributes);attributes.EvtDriverUnload = OnDriverUnload;WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd);status = WdfDriverCreate(DriverObject ,RegistryPath ,&attributes,&config,&driver );}WDF EventWDF MethodWDF ObjectDeclare vars这是一个过滤驱动程序吗?驱动程序是电源管理策略的所有者吗?为设备对象创建I/O队列创建辅助对象,例如计时器,工作者对象,锁等NTSTATUS OnDeviceAdd( WDFDRIVER Driver,PWDFDEVICE_INIT DeviceInit) {WDFDEVICE device;IWDFIoQueue* pDefaultQueue= NULL;DeviceInit->SetPowerPolicyOwnership(TRUE );status= WdfDeviceCreate(&DeviceInit,&deviceAttributes, &device);context = GetContext(device);context->WdfDevice= device;status = pIWDFDevice->CreateIoQueue(NULL, TRUE, WdfIoQueueDispatchParallel,TRUE, FALSE, &pDefaultQueue);return status;}Static Configuration Device CreateSetting ContextQueue Create进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)NTSTATUS OnPrepareHardware(WDFDEVICE Device ,WDFCMRESLIST ResourcesRaw ,WDFCMRESLIST ResourcesTranslated ) {int ResourceCount = WdfCmResourceListGetCount(ResourcesTranslated );for (i=0; i < ResourceCount; i++) {descriptor =WdfCmResourceListGetDescriptor(ResourcesTranslated , i);switch (descriptor->Type) {case CmResourceTypePort : […]case CmResourceTypeMemory : […]case CmResourceTypeInterrupt : […]default : break ;}}return STATUS_SUCCESS ;}进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)NTSTATUS OnD0Entry(IN WDFDEVICE Device ,IN WDF_POWER_DEVICE_STATE RecentPowerState ){PADXL345AccDevice pAccDevice = nullptr pAccDevice = GetContext(Device);WdfWaitLockAcquire(pAccDevice->m_WaitLock);I2CSensorWriteRegister(pAccDevice->m_I2CIoTarget, MY_REGISTER,MY_VALUE, sizeof (MY_VALUE) );pAccDevice->m_PoweredOn = true ;WdfWaitLockRelease(pAccDevice->m_WaitLock);return STATUS_SUCCESS ;}进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)NTSTATUS OnInterruptEnable(IN WDFINTERRUPT Interrupt,IN WDFDEVICE Device){PDEVICE_EXTENSION devExt;ULONG regUlong;PULONG intCsr;devContext = GetDeviceContext(WdfInterruptGetDevice(Interrupt) );intRegId = &devContext->IntRegisterId regVal = READ_REGISTER_ULONG( intRegId );regVal = ENABLE_INTERRUPT_BYTE( regVal );WRITE_REGISTER_ULONG( intRegId, regVal );return STATUS_SUCCESS;}进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)EvtIoResume EvtDMAEnablerFillEvtDeviceSelfManagedIoInitEvtDeviceDisarmWakeFromSxEventChildListScanForChildren EvtDeviceRemoveAddedResourcesStart power-managed queuesEvtIoResume Disarm wake signal, if it was armed. (called onlyduring power up; not called during resource rebalance)EvtDeviceDisarmWakeFromSx EvtDeviceDisarmWakeFromS0Request information about child devicesEvtChildListScanForChildren Enable DMA, if driver supports it EvtDmaEnablerSelfManagedIoStartEvtDmaEnablerEnableEvtDmaEnablerFillConnect interruptsEvtDeviceD0EntryPostInterruptsEnabledEvtInterruptEnable Notify Driver of state change EvtDeviceD0EntryDevice OperationalRestart from here if device is in low power statePrepare hardware for power EvtDevicePrepareHardwareChange resources requirements EvtDeviceRemoveAddedResourcesEvtDeviceFilterAddResourceRequirementsEvtDeviceFilterRemoveResourcRequirementsRestart from here if rebalancing resourcesCreate Device object EvtDriverDeviceAddDevice arrivedEnable self-managed I/O, if driver supports it.EvtDeviceSelfManagedIoInit (implicit power up),EvtDeviceSelfManagedIoRestart (explicit power up)Stop power-managed queuesEvtIoStop Arm wake signal, if it was not armed. (calledonly during power up; not called duringresource rebalance)EvtDeviceArmWakeFromSx EvtDeviceArmWakeFromS0Disable DMA, if driver supports it EvtDmaEnablerSelfManagedIoStopEvtDmaEnablerDisableEvtDmaEnablerFlushDisconnect interrupts EvtDeviceD0EntryPostInterruptsDisabledEvtInterruptDisableNotify Driver of state changeEvtDeviceD0Exit Device OperationalStop here if transitioning to low power stateRelease hardware EvtDeviceReleaseHardwarePurge power-managed queuesEvtIoStop Stop here if rebalancing resourcesFlush I/O if driver supports self-managedI/OEvtDeviceSelfManagedIoFlush Device removedSuspend self-managed I/O, if driver supports it.EvtDeviceSelfManagedIoSuspend Cleanup I/O buffers if driver supports self-managed i/o EvtDeviceSelfManagedIoCleanupDelete device object s context area.EvtDeviceContextCleanupEvtDeviceContextDestroyWDM和操作系统深度耦合,WDM驱动程序直接调用系统服务例程,直接操作系统数据结构WDM驱动程序全部为内核态程序,操作系统对驱动输入只做有限的检查WDF框架处理与操作系统的交互,驱动本身专注于和设备交互WDF基于对象模型和事件驱动WDF支持内核态程序和用户态程序将操作系统底层的复杂逻辑抽象化使驱动代码有可能<20行对不同的硬件设备使用相同的编程模型例如GPIO,UART,I2C,NFC,传感器驱动框架内置的日志系统为数据分析定制的工具支持上千种不同的硬件设备最初UMDF V1基于C++ COMUMDF V2使用和内核态驱动开发相同的模型和语法支持USB周边设备,传感器,NFC,智能卡,HID(包括触控)等等驱动崩溃只会影响宿主进程,不会影响整个操作系统系统重启策略可以自动恢复崩溃的UMDF驱动Windows 10提供了一系列API和DDI,对于所有的Windows平台都是通用的,被称为Universal Windows Platform(UWP) Windows通用驱动是指一个内核态或用户态的驱动并能运行在所有基于UWP的系统上面Windows通用驱动只能调用属于UWP部分的DDI,这部分DDI会在MSDN文档中标记为Universal确定你的驱动是否支持UWP,把你的驱动标记为通用驱动然后重新编译在Visual Studio中打开驱动项目工程在配置选项中把操作系统选择为Windows 10在工程属性中把目标平台改为“通用”,其他选项还有“桌面”和“手机”重新编译驱动,这时可以会出现一些链接器错误尝试修复这些错误,对于出现错误的API,请参考文档是否有通用平台的API可以替代,如果没有,您可能需要重新设计你的驱动KMDF version Release method Included in this versionof Windows Drivers using it run on1.19Windows 10, version1607 WDK Windows 10, version1607Windows 10 version1607 and later,Windows Server 20161.17Windows 10, version1511 WDK Windows 10, version1511Windows 10 version1511 and later,Windows 10 Mobile,Windows 10 IoT Core,Windows Server 20161.15Windows 10 WDK Windows 10Windows 10 for desktop editions, Windows 10 Mobile, IoT Core, Windows Server 2016UMDF version Release method Included in this version ofWindows Drivers using it can run on2.19Windows 10, version 1607WDK Windows 10, version 1607Windows 10, version 1607 (all SKUs), Windows Server 20162.17Windows 10, version 1511WDK Windows 10, version 1511Windows 10 for desktop editions (Home, Pro, Enterprise, and Education), Windows 10 Mobile, Windows 10 IoT Core (IoT Core), Windows Server 20162.15Windows 10 WDK Windows 10Windows 10 for desktop editions, Windows 10 Mobile, IoT Core, Windows Server 2016驱动程序运行在哪个版本的操作系统上驱动程序支持的硬件类型驱动程序使用的驱动模型确定驱动程序是否使用了只有KMDF支持的功能,如果驱动程序没有使用KMDF的功能,并且驱动运行在Windows 8.1或以后的系统上,则可以迁移到UMDF 2https:///en-us/windows/hardware/drivers/wdf/wdf-porting-guide Which Drivers Can Be Ported and WhereDifferences Between WDM and WDFPreparing for PortingSteps in PortingSummary of KMDF and WDM Equivalents。
Somfy 屏幕驱动器 Maestria 50 RTS 设置指南说明书

BEFORE YOU BEGINMotors are shipped in FACTORY MODE without limit settings and thetransmitter ID’s. Power must ONLY be connected to current screenbeing programmed. All other screens must be disconnected fromtheir respective power while programming.Note - If motor is 120V AC hardwired and cannot be disconnected, please contact an electrician prior to calling Somfy customer servicefor assistance.CONNECT TO POWER MODEWith the motor installed in the screen, connect power to the motor (120V AC).MAESTRIA™ 50 RTS MOTORSWhile programming, screens should not be inactive for longer than 2 minutes or motor will exit PROGRAMMING MODE.INITIATE PROGRAMMINGOn the transmitter, press and hold bothUP and DOWN simultaneously until thescreen jogs.Side View50mm motor diameterCHECK THE DIRECTION OF OPERATIONIf hand-held transmitter direction is not properly programmed,Eolis/Soliris RTS sensor will not function in the manner it wasintended. Damage to the screens and injury may occur as a result. Check the direction of rotation by pressingUP or DOWN.If necessary change the direction of rotationby simply pressing and holding the MYbutton until the screen jogs.AUTOMATIC ADJUSTMENT OF THE LIMITS1) Bring the screen to its half-way position.2) Briefly press UP and DOWN simultaneously:the screen jogs.3) Press the DOWN button:the screen lowers until itdetects the LOWER Limit,performs a brief upwardmovement and returns toits LOWER Limit position.4) To validate the setting, press MY untilIf the lower end limit is not set automatically a er several attempts,restart the setting and perform the step on the following page.MAESTRIA™ 50 RTS MOTORSPROGRAMMING MODE MANUAL ADJUSTMENT OF THE UPPER END LIMIT AND THELOWER END LIMIT1) Position the screen at the desired UPPER Limit 2) Press MY and DOWN simultaneously:the screen lowers.3) Position the screen at the desired LOWER Limit.4) Press MY and UP simultaneously: the screen raises.5) Press MY until the screen jogs tovalidate the end limit setting.1 sec.MANUAL ADJUSTMENT OF THE LOWER END LIMIT AND AUTOMATIC ADJUSTMENT OF THE UPPER END LIMIT1) Position the screen at the desiredLOWER Limit.4) Press MY and UP simultaneously:the screen raises.5) Press MY to stop the screen.6) Press MY until the screen jogs tovalidate the LOWER Limit setting.A er pressing MY, the UPPER Limit is set automatically.MANUAL ADJUSTMENT OF THE LOWER END LIMIT AND AUTOMATIC ADJUSTMENT OF THE UPPER END LIMIT WITH AUTOMATIC CATCHING SYSTEM LOCK SYSTEMThe catching system at the lower end limit may vary depending on the driven product, but the procedure for setting the entrance/exit positions of the catches remains the same on all systems.1) Starting from half-way position press and holdUP and DOWN simultaneously for 5 secondsuntil a slow up and down movement.2) Press the DOWN button: the screen lowers.3) Press the MY button to stop the screen at position (P1), which corresponds to the automatic catching system's entrance point.4) Press MY and UP simultaneously:the screen raises and stops,putting tension on the fabric.MAESTRIA™ 50 RTS MOTORS 5 sec.6) Press the DOWN button: the screen lowers.7) Press the MY button to stop the screen at position (P2), which corresponds to the automatic catching system's exit point.8) Press MY until the screen jogsto validate the end limit setting.MAESTRIA™ 50 RTS MOTORSMANUAL ADJUSTMENT OF END LIMITS WITH THE AUTOMATIC CATCHING SYSTEMThe catching system at the lower end limit may vary depending on the screen product, but the procedure for setting the entrance/exit positions of the catches remains the same on all systems.1) Starting from half-way position press and holdUP and DOWN simultaneously for 5 secondsuntil it jogs.3) Press the UP button: the screen raises.4) Press MY to stop the screen at the UPPER Limit(adjust if necessary).5) Press MY and DOWN simultaneously: the screen lowers.6) Press the MY button to stop the screen atposition (P1), which correspondsto the automatic catching system's entrance point. 5 sec.MAESTRIA™ 50 RTS MOTORSUSER MODEADJUSTING THE LIMITS IN USER MODEPROGRAMMING OF A NON PRE PROGRAMMED CONTROL POINT1) Switch off the power supply (the pre-programmed transmitter is deleted).2) Switch the main power supply back on. The screen jogs.3) Simultaneously press the UP and DOWNbuttons of the control to be programmeduntil the screen jogs.4) Briefly press the PROG button of this control:the screen jogs; the control is programmed.7) Press MY and UP simultaneously:the screen raises and stops, puttingtension on the fabric.8) Press the DOWN button:the screen lowers.9) Press the MY button to stop the screenat position (P2), which corresponds tothe automatic catching system's exit point.10) Press MY until the screen jogsto validate the end limit setting.MAESTRIA™ 50 RTS MOTORSOBSTACLE DETECTIONCHOICE OF THE LEVEL OF DETECTIONThis function gives the possibility to adjust the obstacle detection during the downward movement to deactivate it or adjust the sensitivity.1) Starting from the screen in half-way position, press MY and UP briefly and again MY and UP for 2 seconds. The screen jogs.2) Within 10 seconds press UP or DOWN to change the level of detection. (without feedback within 10 seconds the actuator goes back to USER MODE. Go back to Step 1.)ESD level 0: the obstacle detection is more sensitive.The screen moves up and down slowly.ESD level 1: (DEFAULT) - the obstacle detectionis reliable on most zip screens. The screen jogs.ESD level 2: the obstacle detection is deactivated.The screens moves up and down slowly.3) Press MY for 2 seconds to validate the setting.The screen jogs. 2 sec.2 sec.Slow jogSlow jogShort jog。
支持V2显示芯片LVDS输出的Linux驱动

支持V2显示芯片LVDS输出的Linux驱动
随着技术的不断发展,LVDS(低电压差分信号)芯片的应用
已越来越广泛,尤其是在显示器驱动领域。
在Linux操作系统下,如何支持LVDS显示芯片的输出是一个重要的问题。
本
文将介绍如何编写支持V2显示芯片LVDS输出的Linux驱动。
首先,需要了解LVDS显示芯片的工作原理。
LVDS是一种高
速传输信号,通过将信号分为两个相反的信号进行传输,从而降低了信号传输过程中出现噪声的可能性,提高了数据传输的稳定性和可靠性。
支持LVDS输出的显示芯片也是如此,它
通过将图像数据分为两个信号进行传输,从而实现稳定和清晰的显示效果。
接下来,我们需要了解如何编写LVDS输出的Linux驱动。
首先,需要按照LVDS输出的协议规范,对驱动程序进行开发。
其中,需要定义LVDS输出的格式、像素时钟频率等。
根据LVDS输出信号的特性,编写对应的驱动程序,实现LVDS输
出数据的捕捉、处理和传输。
在编写完驱动程序后,需要进行系统的配置和调试。
首先,需要将驱动程序加载到Linux内核中,并配置相关参数,如显示
器分辨率、像素时钟频率等。
同时,还需要进行各种测试,如显示器的测试、图像质量的测试等,以保证LVDS输出的稳
定性和可靠性。
总结而言,支持V2显示芯片LVDS输出的Linux驱动需要按
照协议规范进行开发,实现数据的捕捉、处理和传输,并进行
系统的配置和调试工作。
这样才能满足现代高速传输信号的需求,提高显示效果的稳定性和可靠性,从而更好的满足用户的需求。
大恒图像水星二代(MERCURY2)USB3.0数字相机 应用说明书

水星二代(MERCURY2)USB3.0数字相机应用说明书版本:V2.0.1发布日期:2023-07-28本手册中所提及的其它软硬件产品的商标与名称,都属于相应公司所有。
本手册的版权属于中国大恒(集团)有限公司北京图像视觉技术分公司所有。
未得到本公司的正式许可,任何组织或个人均不得以任何手段和形式对本手册内容进行复制或传播。
本手册的内容若有任何修改,恕不另行通知。
© 2023中国大恒(集团)有限公司北京图像视觉技术分公司版权所有网站:公司总机:************客户服务热线:400-999-7595销售信箱:************************支持信箱:**************************首先感谢您选用大恒图像产品,水星二代(MERCURY2)USB3.0接口数字相机是我公司最新推出的大靶面高分辨率工业数字相机,它具有高分辨率、高清晰度、低噪声等特点。
水星二代USB3.0相机包括标准版(MER2-U3(-L)系列)、Pro版(ME2P-U3系列)、Lite版(ME2L-U3(-L)系列)和Super版(ME2S-U3系列),相机采用了USB3.0标准接口,安装、使用方便。
适用于工业检测、医疗、科研、教育、安防等领域。
本手册详细介绍了水星二代USB3.0接口数字相机的应用。
1. 概述 (1)1.1. 系列概述 (1)1.2. 型号名称说明 (1)1.3. 遵循的标准 (1)1.4. 相关文档及软件下载 (1)2. 注意事项及认证声明 (2)2.1. 安全声明 (2)2.2. 使用注意事项 (2)2.3. EMI、ESD注意事项 (3)2.4. 使用环境注意事项 (3)2.5. 相机机械安装注意事项 (3)2.6. 认证声明 (3)3. 安装指南 (5)3.1. 主机端准备 (5)3.1.1. 用户软件组成 (5)3.1.2. 用户软件接口 (5)3.2. 相机供电 (6)3.2.1. MER2/ME2P/ME2L系列 (6)3.2.2. ME2S系列 (6)3.3. 相机驱动安装 (7)3.3.1. 系统要求 (7)3.3.2. 驱动安装 (7)3.4. 打开相机采集 (7)4. 性能参数 (8)4.1. 重要参数解释 (8)4.1.1. 关于光谱响应图 (8)4.2.1. MER2-041-436U3M/C(-L) (8)4.2.2. MER2-041-528U3M/C(-L) (9)4.2.3. MER2-135-150U3M/C(-L) (11)4.2.4. MER2-135-208U3M/C(-L) (12)4.2.5. MER2-160-227U3M/C(-L) (14)4.2.6. MER2-230-168U3M/C(-L) (15)4.2.7. MER2-231-41U3M/C(-L) (17)4.2.8. MER2-301-125U3M/C(-L) (18)4.2.9. MER2-302-56U3M/C(-L) (20)4.2.10. MER2-502-79U3M/C(-L) (21)4.2.11. MER2-502-79U3M POL (23)4.2.12. MER2-503-36U3M/C(-L) (24)4.2.13. MER2-503-36U3M POL (26)4.2.14. MER2-630-60U3M/C(-L/-W90) (27)4.2.15. MER2-1220-32U3M/C(-L/-W90) (29)4.2.16. MER2-2000-19U3M/C(-L/-W90) (30)4.3. ME2S-U3 系列 (32)4.3.1. ME2S-560-70U3M/C (32)4.3.2. ME2S-1260-28U3M/C (33)4.3.3. ME2S-1610-24U3M/C (35)4.3.4. ME2S-2020-19U3M/C (36)4.3.5. ME2S-2440-16U3M/C (38)4.4. ME2P-U3 系列 (39)4.4.1. ME2P-560-36U3M/C (39)4.4.2. ME2P-900-43U3M/C (41)4.4.3. ME2P-1230-23U3M/C (42)4.4.4. ME2P-1231-32U3M/C (44)4.4.5. ME2P-1840-21U3M/C (45)4.4.6. ME2P-2621-15U3M/C \ ME2P-2622-15U3M/C (47)4.4.7. ME2P-2621-15U3M NIR \ ME2P-2622-15U3M NIR (49)4.5. ME2L-U3(-L) 系列 (51)4.5.1. ME2L-161-61U3M/C(-L) (51)4.5.2. ME2L-203-76U3M/C(-L) (52)4.5.3. ME2L-204-76U3C(-L)-F02 (53)4.5.4. ME2L-505-36U3M/C(-L) (54)4.5.5. ME2L-830-22U3M/C(-L) (56)5. 机械尺寸 (58)5.1. 相机尺寸 (58)5.2. 光学接口 (61)6. 滤光片及镜头 (63)6.1. 滤光片规格参数及响应图 (63)6.2. 镜头选型参考 (64)6.2.1. HN-2M系列定焦镜头 (64)6.2.2. HN-5M 系列定焦镜头 (65)6.2.3. HN-6M 系列定焦镜头 (65)6.2.4. HN-20M 系列定焦镜头 (66)6.2.5. HN-P-6M 系列定焦镜头 (66)6.2.6. HN-P-10M 系列定焦镜头 (67)6.2.7. HN-P-20M 系列定焦镜头 (67)6.2.8. HN-P-25M 系列定焦镜头 (68)6.2.9. HN-P 系列8K~16K线扫镜头 (68)7. 电气接口 (69)7.1. LED灯状态 (69)7.1.1. MER2/ME2P/ME2L系列 (69)7.1.2. ME2S系列 (69)7.2. USB接口 (69)7.3. I/O接口 (70)7.3.1. I/O接口定义 (70)7.3.1.1. MER2/ME2P系列 (70)7.3.1.2. ME2L系列 (70)7.3.1.3. ME2S系列 (71)7.3.2. I/O电气特性 (71)7.3.2.1. Line0(光耦隔离输入)电路 (71)7.3.2.2. Line1(光耦隔离输出)电路 (74)7.3.2.3. Line2/3(双向)电路 (76)8. 功能定义 (83)8.1.1. 配置输入引脚 (83)8.1.2. 配置输出引脚 (84)8.1.3. 读取引脚状态 (89)8.2. 图像采集控制 (89)8.2.1. 开始采集/停止采集 (89)8.2.1.1. 开始采集 (89)8.2.1.2. 停止采集 (90)8.2.2. 采集模式 (91)8.2.3. 触发类型选择 (92)8.2.4. 触发模式切换 (93)8.2.5. 连续采集及其配置 (94)8.2.6. 突发采集功能 (95)8.2.7. 软触发采集及其配置 (96)8.2.8. 外触发采集及其配置 (96)8.2.9. 交叠曝光和非交叠曝光 (97)8.2.10. 设置曝光 (99)8.2.10.1. 设置曝光模式 (99)8.2.10.2. 设置Sensor曝光模式 (101)8.2.10.3. 设置曝光时间模式 (103)8.2.10.4. 设置曝光时间值 (104)8.2.11. 曝光延迟 (104)8.3. 基本属性设置 (106)8.3.1. 增益 (106)8.3.2. Sensor位深 (107)8.3.3. 像素格式 (107)8.3.4. ROI (112)8.3.5. 自动曝光和自动增益 (112)8.3.6. 测试图 (114)8.3.7. 参数组 (116)8.3.9. 时间戳 (118)8.3.10. Binning (118)8.3.11. 像素抽样 (121)8.3.12. 镜像翻转 (123)8.3.13. 数字移位 (125)8.3.14. 采集状态 (127)8.3.15. 黑电平和自动黑电平 (128)8.3.15.1. 黑电平 (128)8.3.15.2. 自动黑电平 (128)8.3.16. 取消参数范围限制 (129)8.3.17. 用户数据区 (137)8.3.18. 定时器 (138)8.3.19. 计数器 (139)8.3.20. 多帧灰度控制 (141)8.4. 图像处理 (142)8.4.1. 环境光源预设 (142)8.4.2. 自动白平衡 (144)8.4.3. 颜色转换 (145)8.4.4. Gamma (147)8.4.5. 查找表 (148)8.4.6. 锐化 (150)8.4.6.1. 锐化 (150)8.4.6.2. 带噪声抑制的锐化 (151)8.4.7. 平场校正 (152)8.4.7.1. 平场校正系数的求取和预览 (154)8.4.7.2. 系数的读取和保存 (155)8.4.7.3. 文件的读取与保存 (155)8.4.7.4. 平场校正使用注意事项 (155)8.4.8. 降噪 (156)8.5. 图像传输 (158)8.5.1. 帧率计算 (158)8.5.2. USB接口带宽 (159)8.5.3. 设备链路带宽限制 (159)8.5.4. 相机采集时间计算 (160)8.6. 事件 (166)8.6.1. 曝光结束事件 (167)8.6.2. 图像帧数据丢弃事件 (167)8.6.3. 帧存不为空事件 (168)8.6.4. 帧开始触发信号溢出事件 (168)8.6.5. 帧高速连拍开始触发信号溢出事件 (168)8.6.6. 帧开始触发信号等待事件 (168)8.6.7. 帧高速连拍开始触发信号等待事件 (168)9. 软件工具 (170)9.1. 查找表生成插件 (170)9.1.1. 界面 (170)9.1.2. 使用说明 (171)9.1.2.1. 使用场景 (171)9.1.2.2. 基准Lut选择 (171)9.1.2.3. 调整Lut (173)9.1.2.4. 保存查找表 (174)9.1.2.5. 读取Lut (174)9.1.3. 注意事项 (175)9.1.3.1. 从设备中读取 (175)9.1.3.2. Lut写入设备 (175)9.1.3.3. 目录结构 (175)9.2. 平场校正插件 (175)9.2.1. 界面 (176)9.2.2.1. 平场校正执行步骤 (177)9.2.2.2. 采集亮场图像 (177)9.2.2.3. 执行平场校正 (178)9.2.2.4. 校正数据从设备读取/写入设备 (178)9.2.2.5. 校正数据从文件加载/保存到文件 (178)9.2.3. 注意事项 (178)9.2.3.1. 平场校正实现方式 (178)9.2.3.2. 预览 (179)9.3. 帧率计算工具 (180)9.4. 静态坏点校正插件 (181)9.4.1. 界面 (181)9.4.2. 使用说明 (183)9.4.2.1. 执行静态坏点校正步骤 (183)9.4.2.2. 捕获图像 (183)9.4.2.3. 静态坏点校正 (183)9.4.2.4. 坏点数据文件使用 (184)10. 常见问题处理 (185)11. 版本说明 (187)12. 联系方式 (192)12.1. 销售联系方式 (192)12.2. 技术支持联系方式 (192)12.3. 总部及各办事处联系方式 (192)1.概述1.概述1.1.系列概述水星二代(MERCURY2)USB3.0数字相机是由大恒图像自主研发的成熟产品,性能出色、价格实惠、安装、使用方便。
思岚科技SLK-S502串口服务器使用说明书

SLK-S502串口服务器使用说明书目录第一章产品介绍 (1)1.1产品简介 (1)1.2详细参数 (2)1.3外观设计 (3)1.3.1产品尺寸 (3)1.3.2外观说明 (4)第二章参数配置 (6)2.1串口服务器配置前准备 (6)2.1.1设置静态IP地址 (6)2.1.2IP获取 (7)2.2登录配置页面 (8)2.3网络配置 (9)2.3.1修改静态登录页面地址 (9)2.3.2DHCP客户端 (9)2.4串口配置 (10)2.4.1使用工具与准备 (10)2.4.2TCP Server (11)2.4.3TCP Client (13)2.4.4UDP Server (15)2.4.5UDP Client (18)2.4.5Modbus TCP (21)2.4.6数据类型 (25)2.4.7POE电源 (27)第三章路由设置 (28)3.1防火墙打开与关闭 (28)3.2端口映射 (28)3.3DMZ设置 (31)第四章开关量控制器 (33)4.1开关量DI (33)4.2开关量DO (38)第五章管理 (40)5.1网络诊断 (40)5.2时间与日期 (41)5.3语言设置 (41)5.4修改密码 (42)5.5固件升级 (43)5.6恢复出厂值 (44)5.7重启 (44)第六章查看 (45)6.1状态 (45)6.2系统日志 (46)第七章退出 (47)7.1退出页面 (47)第一章产品介绍1.1产品简介赛诺联克(SERIALLINK)SLK-S502串口服务器是将多路分散的,低速的,不同标准的串口设备转换成以太网进行集中管理,安装虚拟串口之后可以实现对串口数据的远程读取。
SLK-S502串口服务器支持多种工作模式,其中TCP服务端模式、TCP客户端模式、UDP模式、TCP/UDP Socket,Modbus RTU转Modbus TCP Server等工作模式,允许用户软件通过TCP加端口号访问串行设备。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2010-09兵工自动化29(9)Ordnance Industry Automation ·95·doi: 10.3969/j.issn.1006-1576.2010.09.029SM502双屏显示驱动开发张斌1,张蓉2(1. 中国兵器工业第五八研究所军品部,四川绵阳 621000;2. 中国兵器工业第五八研究所人力资源处,四川绵阳 621000)摘要:为提高系统显示质量和速度,以嵌入式linux-2.6.9版本+PXA270CPU为开发平台,利用SM502实现双屏显示的驱动开发。
开发步骤包括:SM502寄存器地址映射、视频显示帧缓存地址设置、SM502时钟设置。
测试结果证明了双屏显示驱动开发的有效性。
关键词:MMIO;SM502;nCS<0:6>中图分类号:TP311 文献标识码:ASM502 Dual Display Drive DevelopmentZhang Bin1, Zhang Rong2(1. Dept. of Armament Products, No. 58 Research Institute of China Ordnance Industries, Mianyang 621000, China;2. Office of Human Resources Management, No. 58 Research Institute of China Ordnance Industries, Mianyang 621000, China)Abstract: In order to improve the system display quality and speed based on embedded linux-2.6.9 +PXA270CPU development platform, and use SM502 to realize the dual monitors’ driver development. The develop procedure includes SM502 register address mapping, video display frame cache address setting, and SM502 clock setting. The test shows that the driver is effectively.Keywords: MMIO; SM502; nCS<0:6>0 前言SM502是Silicon Motion公司生产的一款移动多媒体处理芯片,具有强大的处理功能,如2D加速引擎支持4:1和1:8缩放比例的前端色彩空间变换;视频引擎支持8位、16位、32位的2种不同的视频输出(双监视器):LCD panel + (Analog CRT/LCD)等。
同时,由于SM502的独立显卡功能不占用CPU资源,使系统显示质量和速度都得到很大的提高。
故采用嵌入式linux-2.6.9版本+PXA270CPU为开发平台,进行SM502视频驱动开发。
1 SM502视频驱动设计1.1 SM502寄存器地址映射SM502针对Intel XScale系列的MMIO基地址是0x03E00000,根据系统硬件设计,PXA270CPU 的片选信号是nCS2,地址空间为0x08000000,因此,SM502的寄存器访问地址为0x0BE00000。
修改“voyager.h”文件中的代码如下:#define FB_PHYSICAL_ADDR 0x08000000 同时,根据硬件设计在“voyager.c”文件的“int _init sm501fb_init(void)”函数的实地址向虚地址映射(ioremap_nocache()函数),并加上CPU的GPIO 设置,具体设置如下:pxa_gpio_mode(18 | GPIO_ALT_FN_1_IN);pxa_gpio_mode(20 | GPIO_ALT_FN_2_IN);pxa_gpio_mode(21 | GPIO_ALT_FN_3_OUT);pxa_gpio_mode(84 | GPIO_OUT);GPSR2 = GPSR2 | 0x00100000;1.2 视频显示帧缓存地址设置系统要求实现CRT和LCD Panel双屏输出,但常规的SM502视频驱动都只支持一种输出模式,故在“voyager.c”文件中的“smi_set_timing”函数中,参照调用“panelSetMode”函数的代码,增加代码如下:CrtSetMode(hw->width, hw->height, 0, hw->hz, sfb->fb.var.bits_per_pixel);同时,在函数“void programMode(reg_table_t *register_table)”中屏蔽掉CRT的FrameBuffer大小判断代码,使其FrameBuffer的大小与LCD的相同。
具体代码如下:else收稿日期:2010-04-14;修回日期:2010-05-05基金项目:“重大新药创制”科技重大专项(2009ZX09313-024)资助课题作者简介:张斌(1976-),男,四川人,1999年毕业于华北工学院,从事嵌入式Linux研究。
兵工自动化·96·第29卷{ value+=FIELD_GET(regRead32(CRT_FB_WIDTH), CRT_FB_WIDTH, OFFSET) * (FIELD_GET(regRead32(CRT_VERTICAL_TOTAL),CRT_VERTICAL_TOTAL, DISPLAY_END) + 1);}系统在初始化时,就会将CRT 和LCD Panel 两种视频输出模式同时初始化了。
1.3 SM502时钟设置SM502视频驱动一般只支持2种外部时钟模式12 M 或者24 M ,但系统中使用11.059 M 时钟晶体,这就需要修改程序中相关时钟的配置代码。
具体参见SM502的数据手册中提供的时钟树。
根据时钟树,以11.059 M 时钟为基准,推算相关寄存器的设置,修改“voyager.c ”文件中的相关代码如下:1) 在“long findClock (long requested_ clock,clock_select_t *clock, display_t display)”函数中,将“for (mclk = 288000000; mclk <= 336000000; mclk += 48000000)”改为“for (mclk = 132708000; mclk <=154826000; mclk +=22118000)”;2) 在“void programMode(reg_table_t*register_table)”中,在CRT 部分的SetPower 函数设置之前添加代码“clock = clock | 0x00010000”。
3 结论经过以上步骤,重新编译内核,下载到Flash ,上电重启后,即可在屏幕的左上角看见小企鹅图标了,并且/dev 下有 fb/0。
cat /dev/zero > /dev/fb/0 和cat /dev/null > /dev/fb/0,就可以看到屏幕黑白变化了。
参考文献:[1] SM502 Mobile Multimedia Companion Chip Databook. [2] Intel PXA27x Processor Family Developer’s Manual.[3] 景富军, 范华献. 西门子802C baseline 数控系统应用[J].兵工自动化, 2009, 28(9): 76-77.*****************************************************************************************************************(上接第 81 页)参考文献:[1] 刘和平, 邓力. 数字信号处理器(DSP )TMS320F28X[M].北京: 机械工业出版社, 2007: 134-171.[2] 王晓明, 王玲. 电动机的DSP 控制—TI 公司DSP 应用[M]. 北京: 北京航空航天大学出版社, 2004.[3] 卢志刚, 吴杰. 数字伺服控制系统与设计[M]. 北京:机械工业出版社, 2007: 367-383.[4] 罗朝霞, 高书莉. CPLD /FPGA 设计及应用[M]. 北京:人民邮电出版社, 2007: 145-151.[5] 刘昌华. 数字逻辑EDA 设计与实践[M]. 北京: 人民邮电出版社, 2006: 308-317.**************************************************(上接第 91 页)(4) 2个夹持座的控制:采用电磁阀控制气缸来控制夹持座A 、B 的夹持与松开,夹持座B 的提升与下降。
(5) 待分瓶的开盖与盖盖过程:开盖由机器人A 把转台A 上待分瓶提到夹持座A 上,A 座夹持后,机器人A 再垂直上移,并移动到转台A 上方停止,实现开盖。
盖盖是当待分瓶液体分完后,夹持了瓶盖的机器人A 移动到夹持座A 上方再下移,将瓶盖插入,然后松开夹持座A ,机器人A 再上移,直到插入转台A 的待分瓶槽座中,实现盖盖并回原位。
接受瓶的开盖与盖盖过程操作方式与待分瓶一样。
3) 触摸屏监控程序设计采用WINCC 组态软件开发工具进行人机监控程序设计,其主要功能有:操作员登陆、运行参数输入(含待分瓶数、单瓶容量,接受瓶数、单瓶容量,取样嘴规格等)、分装过程图形化监控、分装数据在线查看、自动运行操作界面、点动操作界面、分装数据储存管理等。
4 结论经多次实验调试,该系统能够按时完成对带盖瓶装液体(采用纯净水)的自动分装,达到的主要技术指标是:位置定位精度0.2 mm ,单个接受瓶分装时间3 m ,移液容量精度为0.003 ml ,称量精度为2.1 mg ,满足设计要求。
参考文献:[1] 聂诗良, 等. 放射性同位素溶液自动分装系统的研制[J].同位素, 2005, 18(4): 193-196.[2] 陶建国, 等. 机械手在同位素自动分装系统中的应用[J].机械工程师, 2001(11): 55-56.[3] 张景明, 等. 放射性胶囊自动分装控制系统研究[J]. 机床与液压, 2008, 36(3): 152-154.[4] 陈勇, 等. 基于模糊控制的放射性试剂分装机器人[J].仪器仪表学报, 2009, 30(2): 330-334.。