一种基于串口指令的EC调试方法与流程
- 国知局
- 2024-12-06 12:13:47
本技术涉及通信,特别涉及一种基于串口指令的ec调试方法。背景技术:::1、随着计算机技术的不断发展,嵌入式控制器(embedded controller,简称ec)在现代计算机系统中扮演着越来越重要的角色。ec通过连接电源管理、热量管理、键盘控制等多个子系统,负责计算机的整体协调和控制。ec的正常工作直接影响到整机的可靠性和稳定性。因此,在计算机设计和生产过程中,ec的调试是一个不可或缺的关键环节。2、目前,ec调试主要通过jtag、i2c等标准接口进行。调试人员利用各种仿真器、调试器通过这些接口连接到ec,并利用仿真器、调试器提供的调试功能对ec进行控制和调试。然而,这种调试方式存在着诸多局限性:首先,基于标准接口的调试方式可扩展性差。由于jtag、i2c等标准接口的调试指令集固定,无法灵活新增调试指令。当ec芯片更新换代或者调试需求变化时,现有的调试指令往往难以满足需求,需要对调试器进行升级甚至重新设计,可扩展性差;此外,通过标准接口调试ec还面临着接口资源有限、与其他调试对象互斥等问题。一个ec芯片上的jtag、i2c接口数量有限,当多个对象需要调试时,必须进行接口切换,影响调试效率。而且,当其他器件也需要使用这些标准接口时,会与ec调试产生冲突,干扰ec的正常调试。技术实现思路1、针对现有技术中存在的ec调试可扩展性差的问题,本技术提供了一种基于串口指令的ec调试方法,它可以实现灵活可扩展的ec调试功能,便于新增或修改调试指令,适应不同的ec调试需求。2、本技术的目的通过以下技术方案实现。3、本技术提供一种基于串口指令的ec调试方法,包括:s1,将串口的发送端口和接收端口分别从ec端连接到调试设备的接收端口和发送端口,并设置ec端和调试设备的串口参数;其中,串口参数包含波特率、数据位、停止位和校验位;具体的,通过串口连接线将ec端的串口发送端口(tx)连接到调试设备的串口接收端口(rx),将ec端的串口接收端口(rx)连接到调试设备的串口发送端口(tx),实现ec端与调试设备之间的双向数据通信通道的建立;在ec端和调试设备上分别配置串口通信参数:通过设置串口的波特率参数,使ec端和调试设备的串口通信波特率保持一致,确保数据传输的速率匹配;通过设置串口的数据位参数,使ec端和调试设备的串口通信数据位长度保持一致,确保单次传输的数据长度匹配;通过设置串口的停止位参数,使ec端和调试设备的串口通信停止位长度保持一致,确保数据传输的时序同步;通过设置串口的校验位参数,使ec端和调试设备的串口通信校验方式保持一致,确保数据传输的完整性和准确性;ec端和调试设备根据配置的串口参数,分别初始化各自的串口控制器:将波特率、数据位、停止位和校验位的配置值写入串口控制器的相应寄存器,启动串口控制器;使能串口控制器的发送和接收功能,并配置相应的中断,为数据传输做好准备;ec端与调试设备通过串口连接和参数配置,建立起统一的数据传输标准和控制时序,为后续的指令数据交互奠定通信基础。4、s2,调试设备通过串口向ec端发送指令数据;s3,ec端通过串口中断机制判断指令数据是否接收完成;s4,ec端获取接收到的完整指令数据后,采用kmp算法将获取的指令数据与指令集数组中预定义的指令名称进行匹配;其中,指令集数组为ec端内部的一个常量数组;s5,ec端根据指令匹配结果,判断接收到的指令数据是否为打开串口打印信息指令,以及指令数据对应的标志位是否处于低电平:如果接收到的指令为打开串口打印指令,且对应的标志位为低电平,ec端进一步判断串口打印开关标志位的状态,如果串口打印开关标志位为关闭状态,ec端将串口打印信息标志位置于高电平,打开串口打印功能;ec端内部通过优先级任务周期性地轮询检测串口打印信息标志位的状态,如果标志位为高电平,则每隔预设时间间隔,通过串口打印ec端的acpi信息和电池信息;当ec端接收到停止打印指令后,将串口打印信息标志位置于低电平,以关闭串口打印功能。5、其中,ec(embedded controller):ec是笔记本电脑或其他嵌入式系统中的一个微控制器。调试设备是一个用于与ec进行通信和交互的外部设备。它可以是一台计算机、单片机开发板或其他具有串口通信功能的设备。调试设备通过串口向ec发送指令数据,并接收ec返回的信息,以实现对ec的调试和监控。指令数据是调试设备通过串口发送给ec的一段数据。它包含了特定的指令名称和相关参数,用于控制ec的行为或获取ec的状态信息。指令数据的格式和内容由ec和调试设备之间的通信协议所定义。6、其中,kmp算法是一种用于字符串匹配的算法。它利用已经匹配的信息来避免重复比较,提高字符串匹配的效率。在ec调试方法中,kmp算法用于将接收到的指令数据与指令集数组中预定义的指令名称进行匹配。打开串口打印信息指令是一种特定的指令数据,用于控制ec的串口打印功能。当ec接收到该指令时,如果指令数据对应的标志位为低电平,且串口打印开关标志位为关闭状态,ec会将串口打印信息标志位置于高电平,打开串口打印功能。acpi信息(advanced configuration and power interface information):acpi是一种标准的电源管理接口规范。acpi信息包括电源状态、电源管理事件、电源按键状态等与系统电源管理相关的信息。在ec调试方法中,当串口打印功能打开时,ec会通过串口打印acpi信息,以便调试和监控系统的电源管理状态。电池信息包括电池电量、电池温度、充放电状态等与笔记本电脑电池相关的信息。ec负责监测和管理电池的状态,并将电池信息报告给系统。在ec调试方法中,当串口打印功能打开时,ec会通过串口打印电池信息,以便调试和监控电池的状态。7、进一步的,s4,ec端获取接收到的完整指令数据后,采用kmp算法将获取的指令数据与指令集数组中预定义的指令名称进行匹配,包括:根据指令集数组中各指令名称的特征,预先构建kmp算法的部分匹配表pmt,部分匹配表pmt中存储各指令名称前缀和后缀的最长公共元素的长度,用于在匹配过程中加速匹配和避免重复匹配;将接收到的完整指令数据作为主字符串,指令集数组中的指令名称作为模式字符串,采用hash算法对主字符串和模式字符串进行筛选,得到候选匹配对;利用部分匹配表pmt对候选匹配对进行匹配;如果匹配成功,则输出匹配成功的指令名称。8、其中,部分匹配表pmt(partial match table):部分匹配表是kmp算法中用于加速字符串匹配的一种数据结构。它存储了模式字符串的前缀和后缀的最长公共元素的长度。在匹配过程中,通过查询部分匹配表,可以快速确定下一次匹配的位置,避免了重复匹配的情况。9、进一步的,预先构建部分匹配表pmt,包括:设置最大匹配长度阈值max_len,将指令集数组中长度超过最大匹配长度阈值max_len的指令名称划分为多个子模式,子模式的长度小于等于阈值max_len;对指令集数组中的每一个指令名称或子模式,利用kmp算法的next数组构建方法,统计对应的前缀和后缀的公共元素的最大长度,生成相应的部分匹配表;采用基数树trie对指令集数组中各指令名称或子模式对应的部分匹配表进行索引,以加速部分匹配表的查询和访问;将指令集数组中各指令名称或子模式对应的部分匹配表和基数树trie索引组合为完整的部分匹配表数据结构pmt。10、其中,基数树trie(trie tree):基数树是一种用于存储和检索字符串的树形数据结构。它的每个节点代表一个字符,从根节点到某个节点的路径表示一个字符串。在方案中,基数树用于对指令集数组中各指令名称或子模式对应的部分匹配表进行索引,以加速部分匹配表的查询和访问。11、优选地,采用基数树对指令集数组中各指令名称对应的部分匹配表进行索引,包括:将指令集数组中各指令名称或子模式的字符序列构建成trie树,作为ac自动机的基础数据结构;在trie树的基础上,构建失败指针,形成ac自动机;针对ac自动机中每个状态节点,计算其对应的指令名称或子模式在原指令集数组中的索引位置,并将该索引位置作为卫星数据,关联存储在状态节点中;在kmp匹配过程中,遍历指令内容的字符,在ac自动机中进行多模式匹配,对于匹配成功的状态节点,获取其卫星数据,得到对应指令名称或子模式的索引位置;根据索引位置,快速查找指令集数组中对应指令名称或子模式的部分匹配表,确定下一匹配字符位置,直至完成整个指令内容的匹配。在kmp匹配过程中,遍历指令内容的字符,在ac自动机中进行多模式匹配的步骤,包括:初始化当前状态为ac自动机的初始状态,设置当前匹配字符序列为空;依次读取指令内容中的下一个字符,将该字符添加到当前匹配字符序列的末尾;在ac自动机中,根据当前状态和新读入的字符,沿着trie树边转移到下一状态:如果存在对应字符的trie树边,则转移到对应子节点,并更新当前状态;如果不存在对应字符的trie树边,则递归跳转失败指针,直到回退到一个存在对应字符转移边的状态或初始状态;检查当前状态是否对应一个或多个完整匹配的指令名称或子模式,如果是,则根据其关联的指令名称或子模式索引,快速查找对应的部分匹配表。12、进一步的,将接收到的完整指令数据作为主字符串,指令集数组中的指令名称作为模式字符串,采用hash算法对主字符串和模式字符串进行筛选,包括:利用rolling hash算法,在接收到的完整指令数据即主字符串上构建大小为l的滑动窗口,l为指令集数组中模式字符串的平均长度;在主字符串上从左向右滑动,每滑动一个字符,rolling hash算法利用多项式hash函数,在常数时间内完成滑动窗口内子串hash值的增量更新,实现子串hash值的快速计算;多项式hash函数将字符映射到素数域上,利用霍纳法则高效地合并新字符和剔除旧字符对hash值的影响;判断滑动窗口内子串的hash值和模式字符串的hash值是否相等,若相等,则将该子串和模式字符串作为候选匹配对。13、优选的,采用布隆过滤器对指令集数组中各指令名称或子模式的hash值进行索引,在判断子串和模式字符串hash值是否相等之前,利用布隆过滤器快速判断子串的hash值是否存在于模式字符串的hash值集合中,仅当布隆过滤器判断可能存在时,才进行hash值的比对。14、其中,rolling hash算法:rolling hash算法是一种用于快速计算字符串哈希值的算法。它利用滑动窗口和哈希函数的特性,在常数时间内完成滑动窗口内子串哈希值的增量更新。通过比较滑动窗口内子串的哈希值和模式字符串的哈希值,可以快速筛选出潜在的匹配位置。指令集数组是ec端内部的一个常量数组,用于存储预定义的指令名称。每个指令名称都是一个字符串,表示一种特定的指令。在匹配过程中,接收到的指令数据会与指令集数组中的指令名称进行匹配,以确定指令的类型和功能。霍纳法则(horner's rule):霍纳法则是一种用于高效计算多项式值的方法。在rolling hash算法中,多项式哈希函数将字符串映射到素数域上,利用霍纳法则可以在常数时间内完成哈希值的更新。霍纳法则通过合并新字符和剔除旧字符对哈希值的影响,避免了重复计算的开销。部分匹配表pmt和基数树trie用于优化kmp算法的匹配过程,通过预先计算和存储指令名称的前缀和后缀信息,加速了匹配过程并避免了重复匹配。rolling hash算法和霍纳法则用于快速筛选候选匹配对,通过滑动窗口和哈希函数的特性,在常数时间内完成子串哈希值的更新和比较,从而快速定位潜在的匹配位置。15、进一步的,s3中通过串口中断机制判断指令数据是否接收完成包括:ec端的串口接收引脚接收串行数据比特流,并通过串口控制器中的移位寄存器和数据缓冲器,将串行数据比特流转换为并行数据字节,存入串口接收缓冲区;串口控制器根据预设的数据帧格式,判断接收缓冲区内数据是否满足一个完整数据帧的长度,数据帧格式包括起始位、数据位、校验位和停止位;当接收缓冲区内数据长度满足完整数据帧长度时,串口控制器向ec端的中断控制器发送接收完成中断请求;中断控制器响应接收完成中断请求,将中断向量号写入中断向量表,并触发ec端的中断服务程序;中断服务程序根据中断向量号,跳转到预先注册的串口接收中断处理函数;串口接收中断处理函数从串口接收缓冲区读取完整的指令数据帧,并将其传递给指令解析模块;串口接收中断处理函数清除接收完成中断标志,串口控制器继续接收下一帧数据;如果接收缓冲区内数据长度不足一个完整数据帧,则串口控制器继续接收后续字节,并通过移位寄存器和数据缓冲器将其合并到接收缓冲区,直至满足完整数据帧长度才触发接收完成中断。16、进一步的,s2,调试设备通过串口向ec端发送指令数据,包括:s21,调试设备根据预定的指令格式,生成一条完整的调试指令,调试指令以帧为单位,采用帧头+指令类型+数据长度+指令内容+帧尾+crc校验的帧格式;其中,帧头用于标识一帧指令的开始,帧尾用于标识一帧指令的结束,指令类型用于标识指令的功能,数据长度用于标识指令数据的长度,指令内容为具体的指令数据,crc校验用于检验整帧数据的正确性;s22,调试设备将生成的调试指令写入串口控制器的发送缓冲区,并通过串口控制器发送指令数据;其中,串口控制器包含数据寄存器、状态寄存器和中断使能寄存器;s23,串口控制器将发送缓冲区中的并行指令数据转换为串行比特流,通过tx引脚发送;s24,发送完一帧调试指令后,串口控制器清除发送使能位,触发发送完成中断。17、其中,crc校验(cyclic redundancy check):crc校验是一种常用的错误检测方法,用于检验数据传输或存储过程中是否出现错误。发送方根据指定的多项式生成crc校验码,并将其附加到数据的末尾。接收方根据相同的多项式计算接收到的数据的crc校验码,并与接收到的crc校验码进行比较,以检测数据是否出现错误。状态寄存器(statusregister):状态寄存器是串口控制器中的一个寄存器,用于反映串口控制器的当前状态。它包含了一些标志位,如发送缓冲区空标志、接收缓冲区满标志、发送完成标志等。通过读取状态寄存器的值,可以获知串口控制器的工作状态,以便进行相应的操作和处理。中断使能寄存器(interrupt enable register):中断使能寄存器是串口控制器中的一个寄存器,用于控制串口控制器的中断功能。它包含了一些使能位,如发送完成中断使能位、接收完成中断使能位等。通过设置中断使能寄存器的相应位,可以启用或禁用特定的中断源,以便在相应的事件发生时触发中断。并行指令数据:并行指令数据是指以并行方式传输的指令数据。在发送指令数据时,调试设备将生成的调试指令以并行的形式写入串口控制器的发送缓冲区。串口控制器会将并行指令数据转换为串行比特流,通过tx引脚进行发送。tx引脚(transmit pin):tx引脚是串口控制器的发送引脚,用于将串行比特流发送到外部设备。当串口控制器将并行指令数据转换为串行比特流后,会通过tx引脚将数据逐位发送出去。tx引脚的电平变化表示串行数据的0和1,接收设备通过采样tx引脚的电平来接收数据。发送使能位(transmit enable bit):发送使能位是串口控制器中的一个控制位,用于启动或停止数据的发送。当发送使能位被置位时,串口控制器开始将发送缓冲区中的数据转换为串行比特流并通过tx引脚发送。当发送完成后,串口控制器会清除发送使能位,表示当前数据发送完毕,可以进行下一次发送。18、优选的,s23,串口控制器将发送缓冲区中的并行指令数据转换为串行比特流,通过tx引脚发送,包括:串口控制器内部的并串转换电路从发送缓冲区读取一个待发送字节,存入并串转换移位寄存器;波特率发生器产生与设定波特率对应的移位时钟,驱动并串转换移位寄存器中的位依次移出;其中,波特率发生器基于一个高精度基准时钟源和可配置的分频计数器产生移位时钟,通过调整分频系数,可灵活设置数据传输速率;并串转换电路的输出端在移位过程中,根据配置的异步串行帧格式,自动在字节间插入起始位、停止位,根据配置的校验方式,计算当前字节的校验信息,必要时插入校验位,形成异步串行数据帧;其中,异步串行帧格式和校验方式可通过写入串口控制器的配置寄存器灵活配置;异步串行数据帧通过rs232电平转换电路转换为rs232电平标准的信号,从tx引脚发送;其中,rs232电平转换电路包含至少一个rs232收发器芯片,可实现ttl/cmos电平与rs232电平的双向转换,提升信号的传输距离和抗干扰能力;tx引脚连接至调试设备的数字输入引脚,实时反映发送过程中每一位的电平状态;调试设备利用该数字输入引脚,实时读取tx信号,监测发送过程是否出现异常;如检测到tx信号异常,调试设备及时向串口控制器的复位引脚发出复位信号,重新启动传输。19、进一步的,s22,调试设备将生成的调试指令写入串口控制器的发送缓冲区,并通过串口控制器发送指令数据,包括:通过读取串口控制器的状态寄存器,判断发送缓冲区的空闲状态;通过设置中断使能寄存器,使能发送完成中断;当状态寄存器指示发送缓冲区空闲,且发送完成中断在中断使能寄存器中被使能时,将调试指令帧的各字节依次写入串口控制器的数据寄存器,经并行总线存储到发送缓冲区;每写入一个字节后,读取状态寄存器,获取发送缓冲区的更新状态和剩余状态,以防止缓冲区溢出;当一帧调试指令的所有字节都写入数据寄存器后,向控制寄存器的发送使能位写入有效值,启动串口控制器的并串转换和发送电路。20、其中,缓冲区溢出(buffer over flow):缓冲区溢出是指当写入缓冲区的数据量超过了缓冲区的容量时,导致数据溢出并覆盖相邻内存区域的情况。在串口通信中,如果发送缓冲区的容量有限,而写入的数据量过大,就可能发生缓冲区溢出。为了防止缓冲区溢出,调试设备在写入数据时需要检查发送缓冲区的状态,确保有足够的空间容纳要写入的数据。21、有效值(valid value):有效值是指一个变量或寄存器中的合法取值范围。在启动串口控制器的发送电路时,需要向控制寄存器的发送使能位写入有效值。有效值通常是预定义的,表示启用或禁用某个功能。例如,写入1可能表示启用发送,而写入0则表示禁用发送。22、进一步的,s24,发送完一帧调试指令后,串口控制器清除发送使能位,触发发送完成中断,包括:串口控制器发送完一帧的最后一位后,清除控制寄存器中的发送使能位,关闭并串转换和发送电路;调试设备采用中断驱动方式响应发送完成中断,停止对应帧的发送超时定时器;通过读取串口控制器的多个状态标志位,判断本帧指令的发送过程是否正常完成;其中,状态标志位包含状态寄存器中的发送状态位和发送错误位,中断时间寄存器中的发送超时事件位,以及发送超时定时器的溢出标志;如果状态寄存器的发送状态位指示发送正常完成,且发送错误位、发送超时事件位和超时定时器溢出标志均未置位,则判断本帧指令发送成功;调试设备记录本帧指令的发送完成时间,并将指令从发送队列中删除,并将删除事件录入调试日志;反之,则判断本帧指令发送失败,在发送队列中标记为发送失败;调试设备采样基于优先级和时间戳的调度算法管理发送队列。23、其中,超时定时器(timeouttimer):超时定时器是一种用于监测操作是否在规定时间内完成的机制。在发送指令数据时,调试设备会启动一个超时定时器,用于监测指令的发送是否在预期的时间内完成。如果超时定时器在发送完成之前溢出,则表示发送操作超时,可能出现了异常情况。调试设备通过检查超时定时器的溢出标志,可以判断指令发送是否超时,并采取相应的处理措施。24、进一步的,调试设备采用基于优先级和时间戳的调度算法管理发送队列,包括:调试设备为发送队列中的每一条指令关联一个优先级和一个时间戳,优先级用于表示指令的重要程度和紧迫度,时间戳用于记录指令的入队时间或最近一次发送时间;调试设备周期性地扫描发送队列,对于每一条已发送但尚未确认的指令:比较当前时间与指令的时间戳,计算指令在队列中的等待时长;如果指令的等待时长超过设定的超时阈值,且重发次数未达到最大限制,则将该指令标记为发送超时,更新其时间戳为当前时间,重发次数加1,并将其重新插入发送队列;如果指令的等待时长超过设定的超时阈值,且重发次数已达到最大限制,则将该指令从发送队列中剔除,将剔除事件和指令内容上报,并记入调试日志;调试设备将新加入的待发送指令按照优先级插入发送队列:如果新指令的优先级高于队列中所有指令,则将其插入队首;如果新指令的优先级低于队列中所有指令,则将其插入队尾;如果新指令的优先级与队列中某些指令相同,则将其插入具有相同优先级的指令组内,并按照入队时间排序;调试设备根据当前时间,从发送队列中选取最早应发送的指令作为下一帧:扫描发送队列,找出优先级最高、且时间戳最早的指令;如果该指令尚未超时,则将其作为下一帧发送;如果该指令已超时,则按s2452步骤进行超时处理,并重新扫描队列,直到找到一条未超时的指令,将其作为下一帧发送;调试设备提供面向主机的配置接口,允许动态调整发送队列的管理策略:接收主机下发的配置参数,包括指令的最大重发次数、超时阈值、缺省优先级等;根据配置参数,动态调整相关判断条件和操作方式;向主机反馈发送队列的实时状态,包括队列长度、平均等待时长、超时指令数、重发指令数等统计信息,便于优化调试策略。引入优先级和时间戳双重属性,综合表征指令的重要程度和时效性,为队列调度提供更丰富的决策依据。周期性扫描和超时检测机制,动态更新指令的时间戳和重发次数,及时剔除长期未确认的指令,提高队列的时效性。优化了指令的插入排序规则,优先级高的指令总是优先发送,优先级相同的按照先来先服务原则排序,兼顾指令的重要性和公平性。25、相比于现有技术,本技术的优点在于:26、本方法定义了基于帧的指令格式,调试指令以帧头+指令类型+数据长度+指令内容+帧尾+crc校验的形式进行封装和传输。通过增加指令类型和相应的指令内容,可以方便地新增调试指令,无需修改通信协议和数据帧格式。ec端引入了指令集数组来管理各类调试指令,结合kmp算法的部分匹配表pmt和hash算法的rolling hash,可以快速匹配和解析动态新增的指令。因此,本方法具有极强的可扩展性,便于适应ec调试过程中多变的需求。27、本方法在ec端采用优化的kmp算法和hash算法对接收到的指令数据进行匹配和解析。kmp算法利用部分匹配表pmt存储指令集中各指令的前缀后缀公共元素的最大长度,可在新增指令时快速生成pmt。基于pmt可快速找到指令的匹配位置,减少了指令匹配的时间复杂度。hash算法以rolling hash的方式在匹配过程中快速筛选候选指令,进一步提高了指令匹配效率。28、本方法将ec端的串口打印功能抽象为可配置项,引入独立的串口打印信息标志位。通过新增针对不同调试对象的打印指令并设置相应的标志位,可利用现有的日志打印机制灵活输出所需调试信息,无需修改ec端代码。调试人员可根据需要动态开启或关闭指定调试对象的日志打印,提高了调试的针对性。29、本方法在调试设备端引入了基于优先级和时间戳的指令发送队列调度机制,支持对调试指令进行优先级管理、超时检测和重发控制。确保重要或时效性强的调试指令能够优先传输和执行,提高了调试过程的可靠性。ec端采用基于硬件中断的异步通信方式接收调试指令,并通过串口接收中断处理机制进行透明处理,较好地避免了指令接收和执行对ec正常任务的影响。当前第1页12当前第1页12
本文地址:https://www.jishuxx.com/zhuanli/20241204/340087.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。