CN101847132B - 一种实现串行flash存储器和开关复用i/o线的方法和密钥装置 - Google Patents
一种实现串行flash存储器和开关复用i/o线的方法和密钥装置 Download PDFInfo
- Publication number
- CN101847132B CN101847132B CN2010101680663A CN201010168066A CN101847132B CN 101847132 B CN101847132 B CN 101847132B CN 2010101680663 A CN2010101680663 A CN 2010101680663A CN 201010168066 A CN201010168066 A CN 201010168066A CN 101847132 B CN101847132 B CN 101847132B
- Authority
- CN
- China
- Prior art keywords
- key
- button
- main frame
- order
- key device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 40
- 238000004891 communication Methods 0.000 claims description 18
- 238000001514 detection method Methods 0.000 claims description 12
- 230000005540 biological transmission Effects 0.000 claims description 4
- 235000015429 Mirabilis expansa Nutrition 0.000 description 5
- 244000294411 Mirabilis expansa Species 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 235000013536 miso Nutrition 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 239000010409 thin film Substances 0.000 description 1
Images
Landscapes
- Input From Keyboards Or The Like (AREA)
Abstract
本发明公开了一种实现串行FLASH存储器和开关复用I/O线的方法及密钥装置,属于计算机领域。所述方法包括:密钥装置接收主机发送的命令并进行判断;当为读取FLASH存储器的命令时,则将CS端设为低电平,读取FLASH存储器的内容;当命令需要检测按键时,则将CS端设为高电平,读取此时的按键状态;当命令需要检测按键且需要读取FLASH存储器时,则先将CS端设为低电平,读取FLASH存储器中的内容,再将CS端设为高电平,读取此时的按键状态。本发明提供的方法及密钥装置使用4根I/O线可以同时实现FLASH存储器的访问,按键控制和信号灯的指示,节省了I/O线资源和成本。
Description
技术领域
本发明涉及计算机领域,特别涉及一种实现串行FLASH存储器和开关复用I/O线的方法和密钥装置。
背景技术
SPI(Serial Peripheral interface)串行设备接口,SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间。SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息,其中外围设备包括FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。
SPI接口一般使用4条I/O线:串行时钟线(SCK)、主机输出/从机输入数据线MOSI、主机输入/从机输出数据线MISO和低电平有效的从机选择线CS,并且SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备。
现在的USB key在单独访问FLASH时,四根I/O线完全满足SPI总线要求,可以直接操作,并且指示灯通过PNP三极管指示FLASH正在操作,在单独操作按键时,四根I/O线也完全满足SPI总线要求,可以直接操作,并且指示灯通过PNP三极管进行指示,但是USB key想要同时实现外扩串行SPI FLASH的访问、按键操作和信号灯指示时,则需要较多I/O线,从而只能在I/O线较多的控制器芯片上实现,这样就导致了成本较高。
发明内容
为了解决现有技术中的不足,本发明提供了一种实现串行FLASH存储器和开关复用I/O线的方法和密钥装置。
一种实现串行FLASH存储器和开关复用I/O线的方法,所述方法包括:
密钥装置与主机建立连接,进行初始化,打开USB中断;
等待所述主机发送命令,并判断是否接收到所述主机发送的命令,若否,则继续等待接收所述主机发送命令,若是,则关闭USB中断;
对所述接收到的命令进行解析,并根据解析结果进行判断;
当所述命令为读取FLASH存储器的命令时,则所述密钥装置将客户服务CS端设置为低电平,读取FLASH存储器中的内容,并将所述内容返回给所述主机;
当所述命令需要检测按键时,则所述密钥装置将客户服务CS端设置为高电平,读取此时的按键状态,将所述按键状态返回给所述主机,然后对所述命令进行处理;
当所述命令需要检测按键且需要读取FLASH存储器时,则所述密钥装置先将客户服务CS端设置为低电平,读取FLASH存储器中的内容,再将客户服务CS端设置为高电平,读取此时的按键状态,将所述内容和所述按键状态返回给所述主机,然后对所述命令进行处理;
当所述命令为读取处理结果的命令时,则所述密钥装置将处理结果返回给所述主机;
当所述命令为其他命令时,则所述密钥装置对所述命令进行处理。
一种密钥装置,所述密钥装置包括:USB模块、主控模块、存储模块、按键模块和指示灯模块;
USB模块,与主控模块相连,用于所述密钥装置与主机建立连接,以及用于所述密钥装置在主控模块的控制下与所述主机进行通信;
主控模块,与所述USB模块、存储模块、按键模块和指示灯模块分别相连,用于控制所述密钥装置的各种操作;
存储模块,与所述主控模块相连,用于存储各种信息;
按键模块,与所述主控模块相连,用于供用户输入信息;
指示灯模块,与所述主控模块相连,用于在所述主控模块的控制下当所述密钥装置的客户服务CS端的状态为低电平状态之后,指示灯模块变亮,提示用户所述密钥装置的客户服务CS端的当前状态为低电平状态。
本发明的有益效果在于:本发明提供了一种实现串行FLASH存储器和开关复用的方法及密钥装置,在本发明中,密钥装置使用4根I/O线就可以同时实现外扩FLASH存储器的访问,按键控制和信号灯的指示,这样就节省了I/O线资源,并且也可以在I/O线较少的控制器上实现,进一步的节省了成本。
附图说明
图1为本发明实施例1提供的一种实现串行FLASH存储器和开关复用I/O线的方法流程图;
图2为本发明实施例1提供的一种USB中断子程序的操作流程图;
图3为本发明实施例1提供的一种USB Key执行的等待命令子程序的操作流程图;
图4为本发明实施例2提供的另一种实现串行FLASH存储器和开关复用I/O线的方法流程图;
图5为本发明实施例2提供的一种定时器中断子程序的操作流程图;
图6为本发明实施例3提供的密钥装置的结构图;
图7为本发明实施例3提供的密钥装置的详细结构图;
图8为本发明实施例3提供的密钥装置的另一详细结构图;
图9为本发明实施例3提供的智能密钥设备的电路图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式做进一步地详细描述。
实施例1
本发明实施例提供了一种实现串行FLASH存储器和开关复用I/O线的方法,本实施例通过轮循的方式来实现本发明,并且以USB Key这种较为典型的智能密钥设备作为该方法的执行主体进行说明,但并不用以限制该方法的执行主体,本领域技术人员所熟知的智能密钥设备均在本发明的保护范围之内。
参见图1,一种实现串行FLASH存储器和开关复用I/O线的方法,具体实现步骤如下:
步骤101:计算机与USB Key建立连接;
步骤102:USB Key进行初始化;
在本实施例中,USB Key进行初始化具体包括:USB Key对CS端进行初始化,具体地,将CS端的状态设置为高电平状态。
步骤103:打开USB中断;
在本实施例中,当打开USB中断后,再接收到任何关于USB Key的指令时,则先执行USB中断子程序,在USB中断子程序执行完毕后再执行上述指令,参见图2,USB中断子程序中包含的操作具体如下:
103.1:开始;
103.2:将数据标志位设置为有数据标志;
103.3:返回,执行上述命令。
步骤104:等待接收主机发送命令,并判断是否接收到主机发送的命令,若否,则继续执行步骤104,继续等待接收主机发送命令,若是,则执行步骤105;
参见图3,在本实施例中,等待计算机发送命令时,USB Key执行的等待命令子程序中包含的操作具体为:
104.1:开始;
104.2:USB Key判断数据标志位是否置为有数据标志,若否,则再次执行步骤104.2,若是,则执行步骤104.3;
104.3:返回,执行步骤105。
步骤105:关闭USB中断;
步骤106:对接收到的命令进行解析,并根据解析结果进行判断;
当接收到的命令为读取FLASH存储器的命令时,则执行步骤107;
当接收到的命令需要检测按键时,则执行步骤111;
当接收到的命令需要检测按键且需要读取FLASH存储器时,则执行步骤117;
当接收到的命令为读取处理结果的命令时,则执行步骤125;
当接收到的命令为其他命令,即既不是读取FLASH存储器的命令,命令也不需要检测按键,也不是读取处理结果的命令时,则执行步骤126;
步骤107:将CS端设置为低电平,即将CS端置“0”,控制指示灯变亮;
在本实施例中,高电平用“1”表示,低电平用“0”表示,将CS端设置为高电平,即为将CS端置“1”,将CS端设置为低电平,即为将CS端置“0”;
并且,本实施例中指示灯具体为一个发光二极管,当CS端为低电平之后,则控制发光二极管发光,指示灯变亮。
步骤108:读取FLASH存储器中的内容,并将读取得到的内容写入缓存中;
在本实施例中,在读取FLASH存储器中的内容时,除了CS端必须设置为低电平,还要求CLK时钟线上必须有时钟,相应地,主机是通过MOSI线将读取FLASH存储器的命令传给FLASH存储器的,并且读取得到的内容也是通过MISO线传送出去的。
步骤109:将CS端设置为高电平,即将CS端置为“1”;
步骤110:将存储在缓存中的FLASH存储器中的内容返回给主机,然后返回到步骤103;
步骤111:将CS端设置为高电平,即将CS端置“1”;
步骤112:读取此时按键的状态,并判断读取得到的按键状态是否为按键按下状态,若是,执行步骤113,若不是,执行步骤116;
步骤113:防抖并延迟;
在本实施例中,延迟的时间长度可以是自定义的,本实施例中具体定义延迟10秒。
步骤114:再次读取此时按键的状态,并判断读取得到的按键状态是否为按键按下状态,若是,执行步骤115,若不是,执行步骤116;
步骤115:将按键按下状态返回给主机,并对命令进行处理,然后返回步骤103;
步骤116:将按键未按下状态返回给主机,并对命令进行处理,然后返回步骤103;
步骤117:将CS端设置为低电平,即将CS端置“0”,控制指示灯变亮;
步骤118:读取FLASH存储器中的内容,并将读取得到的内容写入到缓存中;
在本实施例步骤118中,读取FLASH存储器中的内容时,除了CS端必须设置为低电平,也还要求CLK时钟线上必须有时钟,相应地,主机是通过MOSI线将读取FLASH存储器的命令传给FLASH存储器的,并且读取得到的内容也是通过MISO线传送出去的。
步骤119:将CS端设置为高电平,即将CS端置为“1”;
步骤120:读取此时按键的状态,并判断读取得到的按键状态是否为按键按下状态,若是,执行步骤121,若不是,执行步骤124;
步骤121:防抖并延迟;
在本实施例中,延迟的时间长度可以是自定义的,本实施例中具体定义延迟10秒。
步骤122:再次读取此时按键的状态,并判断读取得到的按键状态是否为按键按下状态,若是,执行步骤123,若不是,执行步骤124;
步骤123:将按键按下状态和存储在缓存中的FLASH存储器中的内容均返回给主机,并对命令进行处理,然后返回步骤103;
步骤124:将按键未按下状态和存储在缓存中的FLASH存储器中的内容均返回给主机,并对命令进行处理,然后返回步骤103;
步骤125:将处理结果返回给主机,然后执行步骤103;
步骤126:对接收到的命令进行处理,然后执行步骤103。
本实施例提供了一种实现串行FLASH存储器和开关复用的方法,在本实施例中,密钥装置使用4根I/O线就可以同时实现外扩FLASH存储器的访问,按键控制和信号灯的指示,这样就节省了I/O线资源,并且也可以在I/O线较少的控制器上实现,进一步的节省了成本。
实施例2
本实施例提供了另一种实现串行FLASH存储器和开关复用I/O线的方法,本实施例通过中断的方式来实现本发明,在本实施例中,智能密钥设备内部有定时器、超时计数器和检测按键计数器,当打开定时器且定时器到时后,则智能密钥设备执行定时器中断子程序中包含的操作。
本实施例以USB Key这种较为典型的智能密钥设备作为该方法的执行主体进行说明,但并不用以限制该方法的执行主体,本领域技术人员所熟知的智能密钥设备均在本发明的保护范围之内。
参见图4,另一种实现串行FLASH存储器和开关复用I/O线的方法,具体实现步骤如下:
步骤201:计算机与USB Key建立连接;
步骤202:USB Key进行初始化;
在本实施例中,USB Key进行初始化具体包括:USB Key对内部定时器进行初始化,具体地,将定时器的时间间隔设置为50ms,对CS端进行初始化,具体地,将CS端的状态设置为高电平状态,对超时计数器和检测按键计数器进行初始化,具体地,将超时计数器和检测按键计数器的计数值清0。
步骤203:打开USB中断;
在本实施例中,当打开USB中断后,再接收到任何关于USB Key的指令时,则先执行USB中断子程序,在USB中断子程序执行完毕后再执行上述指令,其中USB中断子程序中包含的操作具体与实施例1中的USB中断子程序中包含的操作相同,在此不再重复。
步骤204:等待接收主机发送命令,并判断是否接收到主机发送的命令,若否,则继续执行步骤204,继续等待接收主机发送命令,若是,则执行步骤205;
在本实施例中,等待计算机发送命令时,USB Key执行的等待命令子程序中包含的操作具体与实施例1中USB Key执行的等待命令子程序中包含的操作相同,在此不再重复。
步骤205:关闭USB中断;
步骤206:对接收到的命令进行解析,并根据解析结果进行判断;
当接收到的命令为读取FLASH存储器的命令时,则执行步骤207;
当接收到的命令需要检测按键时,则执行步骤211;
当接收到的命令为读取FLASH存储器的命令且需要检测按键时,则执行步骤218;
当接收到的命令为读取处理结果的命令时,则执行步骤226;
当接收到的命令为其他命令,即既不是读取FLASH存储器的命令,命令也不需要检测按键,也不是读取处理结果的命令时,则执行步骤227;
步骤207:将CS端设置为低电平,即将CS端置“0”,控制指示灯变亮;
在本实施例中,高电平用“1”表示,低电平用“0”表示,将CS端设置为高电平,即为将CS端置“1”,将CS端设置为低电平,即为将CS端置“0”;
并且,本实施例中指示灯具体为一个发光二极管,当CS端为低电平之后,则控制发光二极管发光,指示灯变亮。
步骤208:读取FLASH存储器中的内容,并将读取得到的内容写入到缓存中;
在本实施例中,读取FLASH存储器中的内容时,除了CS端必须设置为低电平,还要求CLK时钟线上必须有时钟,相应地,主机是通过MOSI线将读取FLASH存储器的命令传给FLASH存储器的,并且读取得到的内容也是通过MISO线传送出去的。
步骤209:将CS端设置为高电平,即将CS端置为“1”;
步骤210:将存储在缓存中的FLASH存储器中的内容返回给主机,然后返回到步骤203;
步骤211:将CS端设置为高电平,即将CS端置“1”;
步骤212:将检测按键标志位设置为允许检测按键的标志;
步骤213:将超时计数器和检测按键计数器的计数值均清0,超时计数器和检测按键计数器开始计数;
步骤214:打开定时器;
步骤215:读取此时按键的状态,并判断是否为按键按下状态,若是,则执行步骤216,若不是,则执行步骤217;
在本实施例步骤215中,当判断得到此时按键的状态为按键按下状态时,可以不直接执行步骤216,即不立即将按键按下状态返回给主机,而如实施例1一样,先进行防抖操作,再进行延迟,其中延迟的时间可以是自定义的,然后再次读取此时按键的状态,若判断得到此时按键的状态为按键按下状态时,则执行步骤216,即将按键按下状态返回给主机。
步骤216:将按键按下状态返回给主机,并对命令进行处理,然后返回到步骤203;
步骤217:将按键未按下状态返回给主机,并对命令进行处理,然后返回到步骤203;
步骤218:将CS端设置为低电平,即将CS端置“0”,控制指示灯变亮;
步骤219:读取FLASH存储器中的内容,并将读取得到的内容写入到缓存中;
在本实施例中,读取FLASH存储器中的内容时,除了CS端必须设置为低电平,还要求CLK时钟线上必须有时钟,相应地,主机是通过MOSI线将读取FLASH存储器的命令传给FLASH存储器的,并且读取得到的内容也是通过MISO线传送出去的。
步骤220:将检测按键标志位设置为允许检测按键的标志;
步骤221:将超时计数器和检测按键计数器的计数值均清0,超时计数器和检测按键计数器开始计数,并打开定时器;
步骤222:将CS端设置为高电平,即将CS端置为“1”;
步骤223:读取此时按键的状态,并判断是否为按键按下状态,若是,则执行步骤224,若不是,则执行步骤225;
在本实施例步骤223中,当判断得到此时按键的状态为按键按下状态时,也可以如步骤215一样,先进行防抖操作,再进行延迟,然后再次读取此时按键的状态,并进行判断。
步骤224:将按键按下状态和存储在缓存中的FLASH存储器中的内容返回给主机,并对命令进行处理,然后返回到步骤203;
步骤225:将按键未按下状态和存储在缓存中的FLASH存储器中的内容返回给主机,并对命令进行处理,然后返回到步骤203;
步骤226:将处理结果返回给主机,然后执行步骤203;
步骤227:对接收到的命令进行处理,然后返回到步骤203。
本实施例是通过中断的方式来实现本发明,在打开定时器之后,当定时器到时后,则USB Key执行定时器中断子程序中包含的操作,参见图5,具体操作如下:
步骤301:将超时计数器的计数值和检测按键计数器的计数值分别加1;
步骤302:判断检测按键标志是否设置为允许检测按键的标志,若是,则执行步骤303,若否,则执行步骤311;
步骤303:判断超时计数器的计数值是否达到了预先设定的值,若否,则执行步骤304,若是,则执行步骤306;
在本实施例中,自定义超时计数器的预先设定的计数值为500次,即判断超时计数器的计数值是否达到了500,若否,则执行步骤304,若是,则执行步骤306。
步骤304:读取CS端当前的状态;
步骤305:判断读取得到的CS端当前的状态是否为低电平状态,若否,则执行步骤306,若是,则执行步骤307;
在本实施例步骤305中,判断读取得到的CS端当前的状态是否为低电平状态,即判断读取得到的CS端是否为“0”,若为0,则表示为低电平,若不为0,则表示为高电平。
步骤306:清除允许检测按键的标志,并将超时计数器的计数值清0,超时计数器停止计数,然后执行步骤311;
步骤307:将超时计数器的计数值和检测计数器的计数值分别加1;
步骤308:判断检测按键计数器的计数值是否达到了预先设定的值,若是,则执行步骤309,若否,则执行步骤311;
在本实施例中,自定义检测按键计数器的预先设定的计数值为200次,即判断检测按键计数器的计数值是否达到了200,若是,则执行步骤309,若否,则执行步骤311。
步骤309:设置键盘按下标志;
步骤310:将超时计数器和检测按键计数器的计数值均清0,超时计数器和检测按键计数器停止计数;
步骤311:返回到执行定时器中断子程序之前的主程序中。
本实施例提供了一种实现串行FLASH存储器和开关复用I/O线的方法,在本实施例中,密钥装置使用4根I/O线就可以同时实现外扩FLASH存储器的访问,按键控制和信号灯的指示,这样就节省了I/O线资源,并且也可以在I/O线较少的控制器上实现,进一步的节省了成本。
实施例3
本实施例提供了一种实现串行FLASH存储器和开关复用I/O线的密钥装置,参见图6,该密钥装置包括:
USB模块401,与主控模块402相连,用于密钥装置与主机建立连接,以及用于在主控模块402的控制下实现密钥装置与主机之间的通信;
主控模块402,与USB模块401、存储模块403、按键模块404和指示灯模块405分别相连,用于控制密钥装置进行各种操作;
存储模块403,与主控模块402相连,用于存储各种信息;
其中,存储模块403可以为各种存储芯片,在本实施例中具体为FLASH芯片,因此主控模块402可以读取FLASH芯片中存储的各种信息。
按键模块404,与主控模块402相连,用于供用户输入信息;
指示灯模块405,与主控模块402相连,用于在主控模块402的控制下当密钥装置的CS端为低电平之后,指示灯模块405变亮,提示用户当前密钥装置的CS端为低电平。
参见图7,在本实施例中,一种实施方式下,USB模块401具体可以包括:
USB接口单元4010,用于密钥装置与主机建立连接;
USB通信单元4011,与USB接口单元4010相连,用于密钥装置通过USB接口单元4010与主机进行通信,具体用于接收主机发送的命令,以及用于将按键的当前状态和存储在缓存中的存储模块403中的内容返回给主机,还用于将对命令进行处理的处理结果返回给主机。
相应地,主控模块402可以包括:初始化单元4020、控制单元4021、解析判断单元4022、设置单元4023、读写单元4024、延迟单元4025和处理单元4026;
初始化单元4020,用于密钥装置进行初始化操作;
在本实施例中,具体地,初始化单元4020用于将CS端设置为高电平。
控制单元4021,与初始化单元4020相连,用于在初始化单元4020进行初始化之后,打开USB中断;
解析判断单元4022,与控制单元4021相连,用于判断是否接收到主机发送的命令;
相应地,控制单元4021还用于当解析判断单元4022判断得到已接收到主机发送的命令时,关闭USB中断;
解析判断单元4022还用于对USB通信单元4011接收到的主机发送的命令进行解析,并对解析后的命令进行判断;
当解析判断单元4022判断得到为读取存储模块403的命令时;
设置单元4023,用于将CS端设置为低电平;
相应地,指示灯模块405变亮,提示用户当前智能密钥设备的CS端为低电平;
读写单元4024,用于读取存储模块403中的内容,并将读取得到的存储模块403中的内容写入缓存中;
相应地,设置单元4023还用于将CS端设置为高电平;
USB通信单元4011,用于将存储在缓存中的存储模块403中的内容返回给主机;
当解析判断单元4022判断得到需要检测按键时;
设置单元4023,用于将CS端设置为高电平;
读写单元4024,用于读取此时按键的状态;
相应地,解析判断单元4022还用于判断此时按键的状态是否为按键按下状态;
延迟单元4025,用于当判断得到此时按键的状态为按键按下状态时,进行防抖操作,再进行延迟;
相应地,读写单元4024,用于再次读取此时按键的状态;
解析判断单元4022,用于判断此时按键的状态是否为按键按下状态;
USB通信单元4011,用于将按键的状态返回给主机,具体用于当判断得到此时按键的状态为按键按下状态时,将按键按下状态返回给主机,或者具体用于当判断得到此时按键的状态为未按键按下状态时,按键未按下状态返回给主机;
处理单元4026,用于对命令进行处理;
当解析判断单元4022判断得到需要检测按键且需要读取存储模块403时;
设置单元4023,用于将CS端设置为低电平;
相应地,指示灯模块405变亮,提示用户当前智能密钥设备的CS端为低电平;
读写单元4024,用于读取存储模块403中的内容,并将读取得到的存储模块403中的内容写入缓存中;
相应地,设置单元4023还用于将CS端设置为高电平;
读写单元4024还用于读取此时按键的状态;
相应地,解析判断单元4022还用于判断此时按键的状态是否为按键按下状态;
延迟单元4025,用于当判断得到此时按键的状态为按键按下状态时,进行防抖操作,再进行延迟;
相应地,读写单元4024,用于再次读取此时按键的状态;
解析判断单元4022还用于判断此时按键的状态是否为按键按下状态;
USB通信单元4011,用于将按键的状态和存储在缓存中的存储模块403中的内容返回给主机,具体用于当判断得到此时按键的状态为按键按下状态时,将按键按下状态和存储在缓存中的存储模块403中的内容返回给主机,或者具体用于当判断得到此时按键的状态为按键未按下状态时,将按键未按下状态和存储在缓存中的存储模块403中的内容返回给主机;
处理单元4026,用于对命令进行处理;
当解析判断单元4022判断得到为读取处理结果的命令时;
USB通信单元4011还用于将处理结果返回给主机;
当解析判断单元4022判断得到为其他命令时;
处理单元4026用于对USB通信单元4011接收到的计算机发送的命令进行处理。
参见图8,在本实施例中,另一个实施方式下,USB模块401还可以包括:
USB接口单元4010,用于密钥装置与计算机建立连接;
USB通信单元4011,与USB接口单元4010相连,用于密钥装置通过USB接口单元4010与主机进行通信,具体用于接收主机发送的命令,以及用于将按键的当前状态和存储在缓存中的存储模块403中的内容返回给主机,还用于将对命令进行处理的处理结果返回给主机。
相应地,主控模块402包括:定时器单元4020、超时计数器单元4021、检测按键计数器单元4022、初始化单元4023、控制单元4024、解析判断单元4025、设置单元4026、读写单元4027、运算单元4028和处理单元4029;
定时器单元4020,用于在超时计数器单元4021和检测按键计数器单元4022开始计数时进行定时,当在上述过程中定时器到时时,则执行定时器中断子程序中所包含的操作;
超时计数器单元4021,用于对等待用户通过按键输入信息的时间进行计数;
检测按键计数器单元4022,用于对检测按键的次数进行计数;
初始化单元4023,与定时器单元4020、超时计数器单元4021和检测按键计数器单元4022分别相连,用于密钥装置进行初始化操作;
在本实施例中,具体地,初始化单元4023用于将定时器单元4020的时间间隔设置为50ms,将CS端设置为高电平,以及将超时计数器单元4021和检测按键计数器单元4022的计数值均清0。
控制单元4024,用于在初始化单元4023进行初始化之后,打开USB中断;
解析判断单元4025,用于判断是否已接收到主机发送的命令;
相应地,控制单元4024还用于当解析判断单元4025判断得到已接收到主机发送的命令时,关闭USB中断;
解析判断单元4025还用于对USB通信单元4011接收到的计算机发送的命令进行解析,并对解析后的命令进行判断;
当解析判断单元4025判断得到为读取存储模块403的命令时;
设置单元4026还用于将CS端设置为低电平;
相应地,指示灯模块405变亮,提示用户当前智能密钥设备的CS端为低电平;
读写单元4027,用于读取存储模块403中的数据,并将读取得到的数据写入缓存中;
相应地,设置单元4026还用于将CS端设置为高电平;
USB通信单元4011,用于将存储在缓存中的存储模块403中的内容返回给主机;
当解析判断单元4025判断得到需要检测按键时;
设置单元4026,用于将CS端设置为高电平,并且还用于将检测按键标志设置为允许检测按键的标志;
运算单元4028,用于将超时计数器和检测按键计数器的计数值清零;
相应地,控制单元4024还用于打开超时计数器和检测按键计数器,开始计数,打开定时器;
读写单元4027,用于读取此时按键的状态;
相应地,解析判断单元4025还用于判断此时按键的状态是否为按键按下状态;
USB通信单元4011,用于将按键的状态返回给主机,具体用于当判断得到此时按键的状态为按键按下状态时,将按键按下状态返回给主机,或者具体用于当判断得到此时按键的状态为按键未按下状态时,将按键未按下状态返回给主机;
处理单元4029,用于在打开定时器之后对USB通信单元4011接收到的计算机发送的命令进行处理;
当解析判断单元4025判断得到需要检测按键且读取存储模块403时;
设置单元4026还用于将CS端设置为低电平;
相应地,指示灯模块405变亮,提示用户当前智能密钥设备的CS端为低电平;
读写单元4027,用于读取存储模块403中的数据,并将读取得到的数据写入缓存中;
相应地,设置单元4026还用于将检测按键标志设置为允许检测按键的标志;
运算单元4028,用于将超时计数器和检测按键计数器的计数值清零;
控制单元4024还用于打开超时计数器和检测按键计数器,开始计数,打开定时器;
相应地,设置单元4026还用于将CS端设置为高电平;
读写单元4027,用于读取此时按键的状态;
解析判断单元4025还用于判断此时按键的状态是否为按键按下状态;
USB通信单元4011,用于将按键的状态和存储在缓存中的存储模块403中的内容返回给主机,具体用于当判断得到此时按键的状态为按键按下状态时,将按键按下状态和存储在缓存中的存储模块403中的内容返回给主机,或者具体用于当判断得到此时按键的状态为按键未按下状态时,将按键未按下状态和存储在缓存中的存储模块403中的内容返回给主机;
处理单元4029,用于在打开定时器之后对USB通信单元4011接收到的计算机发送的命令进行处理;
当解析判断单元4025判断得到为读取处理结果的命令时;
USB通信单元4011还用于将处理结果返回给主机;
当解析判断单元4025判断得到为其他命令时,处理单元4029用于在打开定时器之后对USB通信单元4011接收到的计算机发送的命令进行处理。
进一步地,当定时器到时后,执行定时器中断子程序时;
运算单元4028,用于将超时计数器和检测按键计数器的计数值分别加1;
解析判断单元4025,用于判断检测按键标志是否设置为允许检测按键的标志;
当解析判断单元4025判断得到为允许检测按键的标志,则解析判断单元4025还用于判断超时计数器的计数值是否达到了预先设定的值;
设置单元4026,用于当超时计数器的计数值已达到了预先设定的值时,清除允许检测按键的标志,将超时计数器的计数值请零;
相应地,控制单元4024还用于控制超时计数器停止计数;
读写单元4027,用于当超时计数器的计数值没有达到预先设定的值时,读取CS端的当前状态;
相应地,解析判断单元4025还用于判断读取得到的CS端的当前状态是否为低电平状态;
设置单元4026还用于当CS端的当前状态不为低电平状态时,清除允许检测按键的标志,将超时计数器的计数值请零;
相应地,控制单元4024还用于控制超时计数器停止计数;
运算单元4028,用于当CS端的当前状态不为低电平状态时,将超时计数器单元4021和检测按键计数器单元4022的计数值加1;
相应地,解析判断单元4025还用于判断检测按键计数器单元4022的计数值是否达到了预先设定的值;
设置单元4026还用于当检测按键计数器单元4022的计数值已达到预先设定的值时,设置键盘按下标志;
相应地,运算单元4028还用于将超时计数器单元4021和检测按键计数器单元4022的计数值清零;
相应地,控制单元4024还用于控制超时计数器单元4021和检测按键计数器单元4022停止计数。
进一步地,下面结合电路图对本实施例进行描述,参见图9,图9为本实施例提供的智能密钥设备的具体实现电路图,具体描述如下:
图9中的USB接头(4 HEADER)、D+、D-和两个限流电阻(R2、R3)组成了智能密钥设备的USB模块,主要用于智能密钥设备与计算机建立连接,以及用于智能密钥设备与计算机进行通信;
图9中的Z8D64U为智能密钥设备的主控模块,Z8D64U为中兴8位智能卡芯片,其支持USB协议,四个I/O扩展端口,图9中的AT26F004为存储模块,AT26F004是atmel系列SPI接口FLASH,其最大容量为4Mbit,Z8D64U通过4颗I/O线模拟SPI和AT26F004进行通信,读写AT26F004中的内容,并且Z8D64U还用于控制智能密钥设备进行各种操作;
图9中的S1是一个常用薄膜开关,它是智能密钥设备的按键模块,图9中的发光二极管D1和限流电阻R1组成了智能密钥设备的指示灯模块。
本实施例提供了一种实现串行FLASH存储器和开关复用I/O线的密钥装置,在本实施例中,密钥装置使用4根I/O线就可以同时实现外扩FLASH的访问,按键控制和信号灯的指示,这样就节省了I/O线资源,并且也可以在I/O线较少的控制器上实现,进一步的节省了成本。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (17)
1.一种实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,所述方法包括:
密钥装置与主机建立连接,进行初始化,打开USB中断;
等待所述主机发送命令,并判断是否接收到所述主机发送的命令,若否,则继续等待接收所述主机发送命令,若是,则关闭USB中断;
对所述接收到的命令进行解析,并根据解析结果进行判断;
当所述命令为读取FLASH存储器的命令时,则所述密钥装置将客户服务CS端设置为低电平,读取FLASH存储器中的内容,并将所述内容返回给所述主机;
当所述命令需要检测按键时,则所述密钥装置将客户服务CS端设置为高电平,读取此时的按键状态,将所述按键状态返回给所述主机,然后对所述命令进行处理;
当所述命令需要检测按键且需要读取FLASH存储器时,则所述密钥装置先将客户服务CS端设置为低电平,读取FLASH存储器中的内容,再将客户服务CS端设置为高电平,读取此时的按键状态,将所述内容和所述按键状态返回给所述主机,然后对所述命令进行处理;
当所述命令为读取处理结果的命令时,则所述密钥装置将处理结果返回给所述主机;
当所述命令为其他命令时,则所述密钥装置对所述命令进行处理。
2.根据权利要求1所述的实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,所述密钥装置将客户服务CS端设置为低电平之后,所述方法还包括:控制指示灯变亮。
3.根据权利要求1所述的实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,当所述命令为读取FLASH存储器的命令时,所述密钥装置读取FLASH存储器中的内容之后,将所述内容返回给所述主机之前,所述方法还包括:
所述密钥装置将所述内容写入到缓存中;
将所述客户服务CS端设置为高电平。
4.根据权利要求1所述的实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,当所述命令需要检测按键时,所述密钥装置将所述按键状态返回给所述主机的操作具体为:
所述密钥装置判断读取得到的按键状态是否为按键按下状态;
若否,则将按键未按下状态返回给主机;
若是,则进行防抖操作,并延迟;
再次读取此时的按键状态,并判断读取得到的按键状态是否为按键按下状态;
若否,则将按键未按下状态返回给主机;
若是,则将按键按下状态返回给主机。
5.根据权利要求1所述的实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,当所述命令需要检测按键时,所述密钥装置读取此时的按键状态之前,所述方法还包括:
将检测按键标志位设置为允许检测按键的标志;
将超时计数器和检测按键计数器的计数值均清零,所述超时计数器和检测按键计数器开始计数;
打开定时器。
6.根据权利要求5所述的实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,当所述命令需要检测按键时,所述密钥装置将所述按键状态返回给所述主机的操作具体为:
所述密钥装置判断读取得到的按键状态是否为按键按下状态;
若否,则将按键未按下状态返回给主机;
若是,则将按键按下状态返回给主机。
7.根据权利要求1所述的实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,当所述命令需要检测按键且需要读取FLASH存储器时,所述密钥装置读取FLASH存储器中的内容之后,将客户服务CS端设置为高电平之前,所述方法还包括:
所述密钥装置将所述内容存储在缓存中。
8.根据权利要求7所述的实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,当所述命令需要检测按键且需要读取FLASH存储器时,所述密钥装置将所述内容和所述按键状态返回给所述主机的操作具体为:
所述密钥装置判断读取得到的按键状态是否为按键按下状态;
若否,则将按键未按下状态和所述内容返回给主机;
若是,则进行防抖操作,并延迟;
再次读取此时的按键状态,并判断读取得到的按键状态是否为按键按下状态;
若否,则将按键未按下状态和所述内容返回给主机;
若是,则将按键按下状态和所述内容返回给主机。
9.根据权利要求1所述的实现串行FLASH存储器和开关复用I/O线的方法, 其特征在于,当所述命令需要检测按键且需要读取FLASH存储器时,所述密钥装置读取FLASH存储器中的内容之后,将客户服务CS端设置为高电平之前,所述方法还包括:
所述密钥装置将所述内容存储在缓存中;
将检测按键标志位设置为允许检测按键的标志;
将超时计数器和检测按键计数器的计数值均清零,所述超时计数器和检测按键计数器开始计数,打开定时器。
10.根据权利要求9所述的实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,当所述命令需要检测按键且需要读取FLASH存储器时,所述密钥装置将所述内容和所述按键状态返回给所述主机的操作具体为:
所述密钥装置判断读取得到的按键状态是否为按键按下状态;
若否,则将按键未按下状态和所述内容返回给主机;
若是,则将按键按下状态和所述内容返回给主机。
11.根据权利要求1所述的实现串行FLASH存储器和开关复用I/O线的方法,其特征在于,所述其他命令具体是指:既不是读取FLASH存储器的命令,也不是需要检测按键的命令,也不是读取处理结果的命令。
12.一种实现串行FLASH存储器和开关复用I/O线的密钥装置,其特征在于,所述密钥装置包括:
USB模块,与主控模块相连,用于所述密钥装置与主机建立连接,以及用于所述密钥装置在主控模块的控制下与所述主机进行通信;
主控模块,与所述USB模块、存储模块、按键模块和指示灯模块分别相连,用于控制所述密钥装置的各种操作;
存储模块,与所述主控模块相连,用于存储各种信息;
按键模块,与所述主控模块相连,用于供用户输入信息;
指示灯模块,与所述主控模块相连,用于在所述主控模块的控制下当所述密钥装置的客户服务CS端的状态为低电平状态之后,指示灯模块变亮,提示用户所述密钥装置的客户服务CS端的当前状态为低电平状态;
所述一种实现串行FLASH存储器和开关复用I/O线的密钥装置,其特征在于,所述主控模块包括:
初始化单元,用于对密钥装置进行初始化操作;
控制单元,用于在所述初始化单元对所述密钥装置进行初始化之后,打开USB中断,还用于当解析判断单元判断得到已接收到所述主机发送的命令时,关闭所述USB中断;
解析判断单元,用于判断是否接收到所述主机发送的命令,还用于对接收到的所述主机发送的命令进行解析,并对解析后的命令进行判断;
读写单元,用于当所述解析判断单元判断得到所述命令为读取所述存储模块的命令时,读取存储模块中的内容,或者用于当所述解析判断单元判断得到所述命令需要检测按键时,读取此时的按键状态,或者用于当所述解析判断单元判断得到所述命令需要检测按键且需要读取所述存储模块时,读取此时的按键状态和存储模块中的内容;
处理单元,用于对所述主机发送的命令进行处理。
13.根据权利要求12所述的一种实现串行FLASH存储器和开关复用I/O线的密钥装置,其特征在于,所述USB模块包括:
USB接口单元,用于所述密钥装置与所述主机建立连接;
USB通信单元,用于所述密钥装置与所述主机进行通信,具体用于接收所述主机发送的命令,以及用于将所述密钥装置的按键状态、存储在缓存中的所述存储模块中的内容和对所述命令进行处理的处理结果返回给所述主机。
14.根据权利要求12所述的一种实现串行FLASH存储器和开关复用I/O线的密钥装置,其特征在于,所述解析判断单元还用于判断所述读写单元读取得到的按键状态是否为按键按下状态;
所述读写单元还用于将所述读写单元读取得到的存储模块中的内容写入缓存中。
15.根据权利要求14所述的一种实现串行FLASH存储器和开关复用I/O线的密钥装置,其特征在于,所述主控模块还包括:
设置单元,用于将客户服务CS端设置为低电平,或者用于将客户服务CS端设置为高电平;
延迟单元,用于当所述解析判断单元判断得到所述按键状态为按键按下状态时,进行防抖操作,并延迟。
16.根据权利要求14所述的一种实现串行FLASH存储器和开关复用I/O线的密钥装置,其特征在于,所述主控模块还包括:
定时器单元,用于在超时计数器单元和检测按键计数器单元开始计数时进行定时,当所述定时器单元到时后,则执行所述定时器单元中断子程序中所包含的操作;
超时计数器单元,用于对等待用户通过所述按键模块输入信息的时间进行计数;
检测按键计数器单元,用于对检测按键的次数进行计数;
设置单元,用于将客户服务CS端设置为低电平,或者用于将客户服务CS端设置为高电平,还用于将检测按键标志位设置为允许检测按键的标志;
运算单元,用于将所述超时计数器单元和所述检测按键计数器单元的计数值清零。
17.根据权利要求16所述的一种实现串行FLASH存储器和开关复用I/O线的密钥装置,其特征在于,所述控制单元还用于打开所述超时计数器单元和所述检测按键计数器单元,开始计数,以及还用于打开所述定时器单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101680663A CN101847132B (zh) | 2010-05-11 | 2010-05-11 | 一种实现串行flash存储器和开关复用i/o线的方法和密钥装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101680663A CN101847132B (zh) | 2010-05-11 | 2010-05-11 | 一种实现串行flash存储器和开关复用i/o线的方法和密钥装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101847132A CN101847132A (zh) | 2010-09-29 |
CN101847132B true CN101847132B (zh) | 2011-08-17 |
Family
ID=42771756
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101680663A Expired - Fee Related CN101847132B (zh) | 2010-05-11 | 2010-05-11 | 一种实现串行flash存储器和开关复用i/o线的方法和密钥装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101847132B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103077042A (zh) * | 2012-11-14 | 2013-05-01 | 无敌科技(西安)有限公司 | 可随时热拔插sd卡且可自动加载卸载的嵌入式方法 |
CN103914414A (zh) * | 2012-12-30 | 2014-07-09 | 航天信息股份有限公司 | 基于i/o端口的spi模拟方法和装置 |
CN108269091B (zh) * | 2018-01-25 | 2022-03-29 | 北京明华联盟科技有限公司 | 待机处理方法、装置、系统及计算机可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201118609Y (zh) * | 2007-09-11 | 2008-09-17 | 上海盛大网络发展有限公司 | 硬件令牌 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2886748B1 (fr) * | 2005-06-02 | 2007-08-24 | Gemplus Sa | Dispositif de stockage de donnees securise |
-
2010
- 2010-05-11 CN CN2010101680663A patent/CN101847132B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201118609Y (zh) * | 2007-09-11 | 2008-09-17 | 上海盛大网络发展有限公司 | 硬件令牌 |
Also Published As
Publication number | Publication date |
---|---|
CN101847132A (zh) | 2010-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101477504B (zh) | 数据传输系统及数据传输方法 | |
CN105718408A (zh) | 可热插拔的计算系统、计算机实施方法及系统 | |
CN102262434A (zh) | 基于加速计输出来修改电子设备的转换的方法和装置 | |
CN101581964B (zh) | 计算机系统及外围设备驱动方法 | |
CN102768648B (zh) | 低延迟中断收集器、具有该收集器的系统和相关方法 | |
CN103488600B (zh) | 通用从机同步串行接口电路 | |
CN102622044A (zh) | 主机板及其pcie端口动态配置方法 | |
CN105323328A (zh) | 一种在rs—485上使用modbus通讯协议自动识别地址的方法 | |
CN102073611B (zh) | 一种i2c总线控制系统及方法 | |
CN100480923C (zh) | I2c总线从控制器软实现方法 | |
CN101847132B (zh) | 一种实现串行flash存储器和开关复用i/o线的方法和密钥装置 | |
CN110362450A (zh) | 一种日志数据采集方法、装置及计算机可读存储介质 | |
CN101221550A (zh) | 一种串行通讯的方法及芯片 | |
CN206618983U (zh) | 一种基于vme总线的嵌入式工业控制板卡 | |
CN101661332A (zh) | 按键处理方法及计算机系统 | |
CN101604304B (zh) | 一种多cpu间通信的方法和继电保护装置 | |
CN100533424C (zh) | 单线传输接口和单字节操作的键盘显示模块 | |
US20060064521A1 (en) | Universal serial bus (usb) system with single port and host controller thereof | |
CN101221547B (zh) | 具有多个接口的存储卡及其复位控制方法 | |
CN202424693U (zh) | 用于火灾报警控制器的分时复用键盘显示扫描电路 | |
CN204360319U (zh) | 一种按键输入显示系统 | |
CN104765710A (zh) | 一种包含双处理器的读卡器的工作方法 | |
CN201975019U (zh) | 一种机车运行信息显示装置 | |
CN1731317A (zh) | 兼容标准计算机键盘的仪器键盘控制装置 | |
CN104317688B (zh) | 一种电池状态检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110817 |
|
CF01 | Termination of patent right due to non-payment of annual fee |