本章参考资料:《STM32F4xx参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》以及SD简易规格文件《Physical Layer Simplified Specification V2.0》(版本号:2.00)。
特别说明,本书内容是以STM32F42x系列控制器资源讲解。
阅读本章内容之前,建议先阅读SD简易规格文件。
36.1 SDIO简介
SD卡(Secure Digital Memory Card)在我们生活中已经非常普遍了,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口。SDIO全称是安全数字输入/输出接口,多媒体卡(MMC)、SD卡、SD I/O卡都有SDIO接口。STM32F42x系列控制器有一个SDIO主机接口,它可以与MMC卡、SD卡、SD I/O卡以及CE-ATA设备进行数据传输。MMC卡可以说是SD卡的前身,现阶段已经用得很少。SD I/O卡本身不是用于存储的卡,它是指利用SDIO传输协议的一种外设。比如Wi-Fi Card,它主要是提供Wi-Fi功能,有些Wi-Fi模块是使用串口或者SPI接口进行通信的,但Wi-Fi SDIO Card是使用SDIO接口进行通信的。并且一般设计SD I/O卡是可以插入到SD的插槽。CE-ATA是专为轻薄笔记本硬盘设计的硬盘高速通讯接口。
多媒体卡协会网站www.mmca.org中提供了有MMCA技术委员会发布的多媒体卡系统规范。
SD卡协会网站www.sdcard.org中提供了SD存储卡和SDIO卡系统规范。
CE-ATA工作组网站www.ce-ata.org中提供了CE_ATA系统规范。
随之科技发展,SD卡容量需求越来越大,SD卡发展到现在也是有几个版本的,关于SDIO接口的设备整体概括见图 361。
图 361 SDIO接口的设备
关于SD卡和SD I/O部分内容可以在SD协会网站获取到详细的介绍,比如各种SD卡尺寸规则、读写速度标示方法、应用扩展等等信息。
本章内容针对SD卡使用讲解,对于其他类型卡的应用可以参考相关系统规范实现,所以对于控制器中针对其他类型卡的内容可能在本章中简单提及或者被忽略,本章内容不区分SDIO和SD卡这两个概念。即使目前SD协议提供的SD卡规范版本最新是4.01版本,但STM32F42x系列控制器只支持SD卡规范版本2.0,即只支持标准容量SD和高容量SDHC标准卡,不支持超大容量SDXC标准卡,所以可以支持的最高卡容量是32GB。
36.2 SD卡物理结构
一张SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5个部分,见图 362。存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;电源检测单元保证SD卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;卡及接口控制单元控制SD卡的运行状态,它包括有8个寄存器;接口驱动器控制SD卡引脚的输入输出。
图 362 SD卡物理结构
SD卡总共有8个寄存器,用于设定或表示SD卡信息,参考表 361。这些寄存器只能通过对应的命令访问,对SD卡进行控制操作并不是像操作控制器GPIO相关寄存器那样一次读写一个寄存器的,它是通过命令来控制,SDIO定义了64个命令,每个命令都有特殊意义,可以实现某一特定功能,SD卡接收到命令后,根据命令要求对SD卡内部寄存器进行修改,程序控制中只需要发送组合命令就可以实现SD卡的控制以及读写操作。
表 361 SD卡寄存器
每个寄存器位的含义可以参考SD简易规格文件《Physical Layer Simplified Specification V2.0》第5章内容。
36.3 SDIO总线
36.3.1 总线拓扑
SD卡一般都支持SDIO和SPI这两种接口,本章内容只介绍SDIO接口操作方式,如果需要使用SPI操作方式可以参考SPI相关章节。另外,STM32F42x系列控制器的SDIO是不支持SPI通信模式的,如果需要用到SPI通信只能使用SPI外设。
SD卡总线拓扑参考图 363。虽然可以共用总线,但不推荐多卡槽共用总线信号,要求一个单独SD总线应该连接一个单独的SD卡。
图 363 SD卡总线拓扑
SD卡使用9-pin接口通信,其中3根电源线、1根时钟线、1根命令线和4根数据线,具体说明如下:
CLK:时钟线,由SDIO主机产生,即由STM32控制器输出;
CMD:命令控制线,SDIO主机通过该线发送命令控制SD卡,如果命令要求SD卡提供应答(响应),SD卡也是通过该线传输应答信息;
D0-3:数据线,传输读写数据;SD卡可将D0拉低表示忙状态;
VDD、VSS1、VSS2:电源和地信号。
在之前的I2C以及SPI章节都有详细讲解了对应的通信时序,实际上,SDIO的通信时序简单许多,SDIO不管是从主机控制器向SD卡传输,还是SD卡向主机控制器传输都只以CLK时钟线的上升沿为有效。SD卡操作过程会使用两种不同频率的时钟同步数据,一个是识别卡阶段时钟频率FOD,最高为400kHz,另外一个是数据传输模式下时钟频率FPP,默认最高为25MHz,如果通过相关寄存器配置使SDIO工作在高速模式,此时数据传输模式最高频率为50MHz。
对于STM32控制器只有一个SDIO主机,所以只能连接一个SDIO设备,开发板上集成了一个Micro SD卡槽和SDIO接口的WiFi模块,要求只能使用其中一个设备。SDIO接口的WiFi模块一般集成有使能线,如果需要用到SD卡需要先控制该使能线禁用WiFi模块。
36.3.2 总线协议
SD总线通信是基于命令和数据传输的。通讯由一个起始位("0"),由一个停止位("1")终止。SD通信一般是主机发送一个命令(Command),从设备在接收到命令后作出响应(Response),如有需要会有数据(Data)传输参与。
SD总线的基本交互是命令与响应交互,见图 364。
图 364 命令与响应交互
SD数据是以块(Black)形式传输的,SDHC卡数据块长度一般为512字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要CRC位来保证数据传输成功。CRC位由SD卡系统硬件生成。STM32控制器可以控制使用单线或4线传输,本开发板设计使用4线传输。图 365为主机向SD卡写入数据块操作示意。
图 365 多块写入操作
SD数据传输支持单块和多块读写,它们分别对应不同的操作命令,多块写入还需要使用命令来停止整个写入操作。数据写入前需要检测SD卡忙状态,因为SD卡在接收到数据后编程到存储区过程需要一定操作时间。SD卡忙状态通过把D0线拉低表示。
数据块读操作与之类似,只是无需忙状态检测。
使用4数据线传输时,每次传输4bit数据,每根数据线都必须有起始位、终止位以及CRC位,CRC位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过D0线反馈给主机。
SD卡数据包有两种格式,一种是常规数据(8bit宽),它先发低字节再发高字节,而每个字节则是先发高位再发低位,4线传输示意如图 366。
图 366 8位宽数据包传输
4线同步发送,每根线发送一个字节的其中两个位,数据位在四线顺序排列发送,DAT3数据线发较高位,DAT0数据线发较低位。
另外一种数据包发送格式是宽位数据包格式,对SD卡而言宽位数据包发送方式是针对SD卡SSR(SD状态)寄存器内容发送的,SSR寄存器总共有512bit,在主机发出ACMD13命令后SD卡将SSR寄存器内容通过DAT线发送给主机。宽位数据包格式示意见图 367。
图 367 宽位数据包传输
36.3.3 命令
SD命令由主机发出,以广播命令和寻址命令为例,广播命令是针对与SD主机总线连接的所有从设备发送的,寻址命令是指定某个地址设备进行命令传输。
1. 命令格式
SD命令格式固定为48bit,都是通过CMD线连续传输的(数据线不参与),见图 368。
图 368 SD命令格式
SD命令的组成如下:
起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为0,终止位为1。
传输标志:用于区分传输方向,该位为1时表示命令,方向为主机传输到SD卡,该位为0时表示响应,方向为SD卡传输到主机。
命令主体内容包括命令、地址信息/参数和CRC校验三个部分。
命令号:它固定占用6bit,所以总共有64个命令(代号:CMD0~CMD63),每个命令都有特定的用途,部分命令不适用于SD卡操作,只是专门用于MMC卡或者SD I/O卡。
地址/参数:每个命令有32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这32bit用于指定参数,而寻址命令这32bit用于指定目标SD卡的地址。
CRC7校验:长度为7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令。
2. 命令类型
SD命令有4种类型:
无响应广播命令(bc),发送到所有卡,不返回任务响应;
带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;
寻址命令(ac),发送到选定卡,DAT线无数据传输;
寻址数据传输命令(adtc),发送到选定卡,DAT线有数据传输。
另外,SD卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了两种类型的通用命令:特定应用命令(ACMD)和常规命令(GEN_CMD)。要使用SD卡制造商特定的ACMD命令如ACMD6,需要在发送该命令之前无发送CMD55命令,告知SD卡接下来的命令为特定应用命令。CMD55命令只对紧接的第一个命令有效,SD卡如果检测到CMD55之后的第一条命令为ACMD则执行其特定应用功能,如果检测发现不是ACMD命令,则执行标准命令。
3. 命令描述
SD卡系统的命令被分为多个类,每个类支持一种"卡的功能设置"。表 362列举了SD卡部分命令信息,更多详细信息可以参考SD简易规格文件说明,表中填充位和保留位都必须被设置为0。
虽然没有必须完全记住每个命令详细信息,但越熟悉命令对后面编程理解非常有帮助。
表 362 SD部分命令描述
36.3.4 响应
响应由SD卡向主机发出,部分命令要求SD卡作出响应,这些响应多用于反馈SD卡的状态。SDIO总共有7个响应类型(代号:R1~R7),其中SD卡没有R4、R5类型响应。特定的命令对应有特定的响应类型,比如当主机发送CMD3命令时,可以得到响应R6。与命令一样,SD卡的响应也是通过CMD线连续传输的。根据响应内容大小可以分为短响应和长响应。短响应是48bit长度,只有R2类型是长响应,其长度为136bit。各个类型响应具体情况如表 363。
除了R3类型之外,其他响应都使用CRC7校验来校验,对于R2类型是使用CID和CSD寄存器内部CRC7。
表 363 SD卡响应类型
R1(正常响应命令)
36.4 SD卡的操作模式及切换
36.4.1 SD卡的操作模式
SD卡有多个版本,STM32控制器目前最高支持《Physical Layer Simplified Specification V2.0》定义的SD卡,STM32控制器对SD卡进行数据读写之前需要识别卡的种类:V1.0标准卡、V2.0标准卡、V2.0高容量卡或者不被识别卡。
SD卡系统(包括主机和SD卡)定义了两种操作模式:卡识别模式和数据传输模式。在系统复位后,主机处于卡识别模式,寻找总线上可用的SDIO设备;同时,SD卡也处于卡识别模式,直到被主机识别到,即当SD卡接收到SEND_RCA(CMD3)命令后,SD卡就会进入数据传输模式,而主机在总线上所有卡被识别后也进入数据传输模式。在每个操作模式下,SD卡都有几种状态,参考表 364,通过命令控制实现卡状态的切换。
表 364 SD卡状态与操作模式
36.4.2 卡识别模式
在卡识别模式下,主机会复位所有处于"卡识别模式"的SD卡,确认其工作电压范围,识别SD卡类型,并且获取SD卡的相对地址(卡相对地址较短,便于寻址)。在卡识别过程中,要求SD卡工作在识别时钟频率FOD的状态下。卡识别模式下SD卡状态转换如图 369。
图 369 卡识别模式状态转换图
主机上电后,所有卡处于空闲状态,包括当前处于无效状态的卡。主机也可以发送GO_IDLE_STATE(CMD0)让所有卡软复位从而进入空闲状态,但当前处于无效状态的卡并不会复位。
主机在开始与卡通信前,需要先确定双方在互相支持的电压范围内。SD卡有一个电压支持范围,主机当前电压必须在该范围可能才能与卡正常通信。SEND_IF_COND(CMD8)命令就是用于验证卡接口操作条件的(主要是电压支持)。卡会根据命令的参数来检测操作条件匹配性,如果卡支持主机电压就产生响应,否则不响应。而主机则根据响应内容确定卡的电压匹配性。CMD8是SD卡标准V2.0版本才有的新命令,所以如果主机有接收到响应,可以判断卡为V2.0或更高版本SD卡。
SD_SEND_OP_COND(ACMD41)命令可以识别或拒绝不匹配它的电压范围的卡。ACMD41命令的VDD电压参数用于设置主机支持电压范围,卡响应会返回卡支持的电压范围。对于对CMD8有响应的卡,把ACMD41命令的HCS位设置为1,可以测试卡的容量类型,如果卡响应的CCS位为1说明为高容量SD卡,否则为标准卡。卡在响应ACMD41之后进入准备状态,不响应ACMD41的卡为不可用卡,进入无效状态。ACMD41是应用特定命令,发送该命令之前必须先发CMD55。
ALL_SEND_CID(CMD2)用来控制所有卡返回它们的卡识别号(CID),处于准备状态的卡在发送CID之后就进入识别状态。之后主机就发送SEND_RELATIVE_ADDR(CMD3)命令,让卡自己推荐一个相对地址(RCA)并响应命令。这个RCA是16bit地址,而CID是128bit地址,使用RCA简化通信。卡在接收到CMD3并发出响应后就进入数据传输模式,并处于待机状态,主机在获取所有卡RCA之后也进入数据传输模式。
36.4.3 数据传输模式
只有SD卡系统处于数据传输模式下才可以进行数据读写操作。数据传输模式下可以将主机SD时钟频率设置为FPP,默认最高为25MHz,频率切换可以通过CMD4命令来实现。数据传输模式下,SD卡状态转换过程见图 3610。
图 3610 数据传输模式卡状态转换
CMD7用来选定和取消指定的卡,卡在待机状态下还不能进行数据通信,因为总线上可能有多个卡都是出于待机状态,必须选择一个RCA地址目标卡使其进入传输状态才可以进行数据通信。同时通过CMD7命令也可以让已经被选择的目标卡返回到待机状态。
数据传输模式下的数据通信都是主机和目标卡之间通过寻址命令点对点进行的。卡处于传输状态下可以使用表 362中面向块的读写以及擦除命令对卡进行数据读写、擦除。CMD12可以中断正在进行的数据通信,让卡返回到传输状态。CMD0和CMD15会中止任何数据编程操作,返回卡识别模式,这可能导致卡数据被损坏。
36.5 STM32的SDIO功能框图
STM32控制器有一个SDIO,由两部分组成:SDIO适配器和APB2接口,见图 3611。SDIO适配器提供SDIO主机功能,可以提供SD时钟、发送命令和进行数据传输。APB2接口用于控制器访问SDIO适配器寄存器并且可以产生中断和DMA请求信号。
图 3611 SDIO功能框图
SDIO使用两个时钟信号,一个是SDIO适配器时钟(SDIOCLK=48MHz),另外一个是APB2总线时钟(PCLK2,一般为90MHz)。
STM32控制器的SDIO是针对MMC卡和SD卡的主设备,所以预留有8根数据线,对于SD卡最多用四根数据线。
SDIO适配器是SD卡系统主机部分,是STM32控制器与SD卡数据通信中间设备。SDIO适配器由五个单元组成,分别是控制单元、命令路径单元、数据路径单元、寄存器单元以及FIFO,见图 3612。
图 3612 SDIO适配器框图
1. 控制单元
控制单元包含电源管理和时钟管理功能,结构如图 3613。电源管理部件会在系统断电和上电阶段禁止SD卡总线输出信号。时钟管理部件控制CLK线时钟信号生成。一般使用SDIOCLK分频得到。
图 3613 SDIO适配器控制单元
2. 命令路径
命令路径控制命令发送,并接收卡的响应,结构见图 3614。
图 3614 SDIO适配器命令路径
关于SDIO适配器状态转换流程可以参考图 369,当SD卡处于某一状态时,SDIO适配器必然处于特定状态与之对应。STM32控制器以命令路径状态机(CPSM)来描述SDIO适配器的状态变化,并加入了等待超时检测功能,以便退出永久等待的情况。CPSM的描述见图 3615。
图 3615 CPSM状态机描述图
3. 数据路径
数据路径部件负责与SD卡相互数据传输,内部结构见图 3616。
图 3616 SDIO适配器数据路径
SD卡系统数据传输状态转换参考图 3610,SDIO适配器以数据路径状态机(DPSM)来描述SDIO适配器状态变化情况。并加入了等待超时检测功能,以便退出永久等待情况。发送数据时,DPSM处于等待发送(Wait_S)状态,如果数据FIFO不为空,DPSM变成发送状态并且数据路径部件启动向卡发送数据。接收数据时,DPSM处于等待接收状态,当DPSM收到起始位时变成接收状态,并且数据路径部件开始从卡接收数据。DPSM状态机描述见图 3617。
图 3617 DPSM状态机描述图
4. 数据FIFO
数据FIFO(先进先出)部件是一个数据缓冲器,带发送和接收单元。控制器的FIFO包含宽度为32bit、深度为32字的数据缓冲器和发送/接收逻辑。其中SDIO状态寄存器(SDIO_STA)的TXACT位用于指示当前正在发送数据,RXACT位指示当前正在接收数据,这两个位不可能同时为1。
当TXACT为1时,可以通过APB2接口将数据写入到传输FIFO。
当RXACT为1时,接收FIFO存放从数据路径部件接收到的数据。
根据FIFO空或满状态会把SDIO_STA寄存器位值1,并可以产生中断和DMA请求。
5. 适配器寄存器
适配器寄存器包含了控制SDIO外设的各种控制寄存器及状态寄存器,内容较多,可以通过SDIO提供的各种结构体来了解,这些寄存器的功能都被整合到了结构体或ST标准库之中。
36.6 SDIO初始化结构体
标准库函数对SDIO外设建立了三个初始化结构体,分别为SDIO初始化结构体SDIO_InitTypeDef、SDIO命令初始化结构体SDIO_CmdInitTypeDef和SDIO数据初始化结构体SDIO_DataInitTypeDef。这些结构体成员用于设置SDIO工作环境参数,并由SDIO相应初始化配置函数或功能函数调用,这些参数将会被写入到SDIO相应的寄存器,达到配置SDIO工作环境的目的。
初始化结构体和初始化库函数配合使用是标准库精髓所在,理解了初始化结构体每个成员意义基本上就可以对该外设运用自如了。初始化结构体定义在stm32f4xx_sdio.h文件中,初始化库函数定义在stm32f4xx_sdio.c文件中,编程时我们可以结合这两个文件内注释使用。
SDIO初始化结构体用于配置SDIO基本工作环境,比如时钟分频、时钟沿、数据宽度等等。它被SDIO_Init函数使用。
代码清单 361 SDIO初始化结构体
1 typedef struct {
2 uint32_t SDIO_ClockEdge; // 时钟沿
3 uint32_t SDIO_ClockBypass; // 旁路时钟
4 uint32_t SDIO_ClockPowerSave; // 节能模式
5 uint32_t SDIO_BusWide; // 数据宽度
6 uint32_t SDIO_HardwareFlowControl; // 硬件流控制
7 uint8_t SDIO_ClockDiv; // 时钟分频
8 } SDIO_InitTypeDef;
各结构体成员的作用介绍如下:
(1) SDIO_ClockEdge:主时钟SDIOCLK产生CLK引脚时钟有效沿选择,可选上升沿或下降沿,它设定SDIO时钟控制寄存器(SDIO_CLKCR)的NEGEDGE位的值,一般选择设置为高电平。
(2) SDIO_ClockBypass:时钟分频旁路使用,可选使能或禁用,它设定SDIO_CLKCR寄存器的BYPASS位。如果使能旁路,SDIOCLK直接驱动CLK线输出时钟;如果禁用,使用SDIO_CLKCR寄存器的CLKDIV位值分频SDIOCLK,然后输出到CLK线。一般选择禁用时钟分频旁路。
(3) SDIO_ClockPowerSave:节能模式选择,可选使能或禁用,它设定SDIO_CLKCR寄存器的PWRSAV位的值。如果使能节能模式,CLK线只有在总线激活时才有时钟输出;如果禁用节能模式,始终使能CLK线输出时钟。
(4) SDIO_BusWide:数据线宽度选择,可选1位数据总线、4位数据总线或8为数据总线,系统默认使用1位数据总线,操作SD卡时在数据传输模式下一般选择4位数据总线。它设定SDIO_CLKCR寄存器的WIDBUS位的值。
(5) SDIO_HardwareFlowControl:硬件流控制选择,可选使能或禁用,它设定SDIO_CLKCR寄存器的HWFC_EN位的值。硬件流控制功能可以避免FIFO发送上溢和下溢错误。
(6) SDIO_ClockDiv:时钟分频系数,它设定SDIO_CLKCR寄存器的CLKDIV位的值,设置SDIOCLK与CLK线输出时钟分频系数:
CLK线时钟频率=SDIOCLK/([CLKDIV+2])。
36.7 SDIO命令初始化结构体
SDIO命令初始化结构体用于设置命令相关内容,比如命令号、命令参数、响应类型等等。它被SDIO_SendCommand函数使用。
代码清单 362 SDIO命令初始化接口
1 typedef struct {
2 uint32_t SDIO_Argument; // 命令参数
3 uint32_t SDIO_CmdIndex; // 命令号
4 uint32_t SDIO_Response; // 响应类型
5 uint32_t SDIO_Wait; // 等待使能
6 uint32_t SDIO_CPSM; // 命令路径状态机
7 } SDIO_CmdInitTypeDef;
各个结构体成员介绍如下:
(1) SDIO_Argument:作为命令的一部分发送到卡的命令参数,它设定SDIO参数寄存器(SDIO_ARG)的值。
(2) SDIO_CmdIndex:命令号选择,它设定SDIO命令寄存器(SDIO_CMD)的CMDINDEX位的值。
(3) SDIO_Response:响应类型,SDIO定义两个响应类型:长响应和短响应。根据命令号选择对应的响应类型。SDIO定义了四个32位的SDIO响应寄存器(SDIO_RESPx,x=1..4),短响应只用到SDIO_RESP1。
上一篇:第37章 基于SD卡的FatFs文件系统—零死角玩转STM32-F429系列
下一篇:第35章 WWDG—窗口看门狗—零死角玩转STM32-F429系列
推荐阅读
史海拾趣
芯佰微(Corebai)公司自创立之初,就致力于成为电子行业中微电子领域的领军企业。创始人团队凭借对半导体技术的深厚理解和对市场需求的敏锐洞察,确立了公司的核心技术路线——专注于高性能模拟和数字集成电路的研发。在创业初期,芯佰微就投入大量资源用于技术研发,成功研发出多款具有自主知识产权的集成电路产品,奠定了公司在行业中的技术基础。
随着公司实力的增强,DZUS公司开始拓展国际市场。通过参加国际展览、与海外客户建立合作关系等方式,公司逐渐打开了国际市场的大门。同时,公司还针对不同国家和地区的市场需求,推出了定制化的产品和服务。这些举措使DZUS公司的品牌知名度和市场份额不断提升。
Fairview Microwave Inc公司成立于1992年,最初只是一个由几位工程师组成的小团队,他们致力于开发高质量的射频和微波组件。在当时,微波技术正逐渐在通信、雷达和卫星通信等领域得到广泛应用,但市场上缺乏高性能、可靠的组件供应商。Fairview Microwave看到了这个市场空白,决定从适配器、连接器和衰减器等基础组件入手,凭借精湛的技术和不断的创新,逐渐在行业内树立了良好的口碑。
进入21世纪后,Heatron公司开始积极寻求国际合作机会,以进一步拓展其全球业务。公司先后与多个国家的知名企业建立了战略伙伴关系,共同开发新产品、新技术。通过资源共享和市场互补,Heatron不仅成功进入了多个新兴市场,还显著提升了其品牌在国际市场上的知名度和影响力。
用短信猫发送单条短信的话没有问题。。每条发送在5s左右,但是如果是长短信的话(两条或更多),第一条发送时间是5s,但第二条就会用30s左右。 达人们帮帮小弟吧。刚开始弄这个,郁闷死了。… 查看全部问答∨ |
小弟刚刚接触cshell,现在碰到一个对我来说很难的问题,具体是这样的: 小弟要写一个cshell的脚本,用来调用synopsis的vcs仿真并控制其仿真流程。 这一步很简单,只需要在脚本中执行"./simv -ucli"就 ...… 查看全部问答∨ |
大家讨论下呢, 应用情境os:wince,app是自己公司开发,也可以提供sdk包给第三方开发, 那如何做到wince和app如何分开呢?怎么做比较合理? 不能像手持设备一样,就提供个wince的系统,最好能够把开始键和其他系统供功能给屏蔽掉。… 查看全部问答∨ |
嵌入式软件工程师: 一、职位描述: 1. 在项目经理带领下,完成嵌入式系统软件设计、平台移植; 2. 撰写软件设计文档; 3. 负责产品软件升级和更新。 二、 ...… 查看全部问答∨ |
打算在ubuntu 8.04下用建一个arm9的交叉编译环境,从网上搜了一下看到好多方法,不知都要安装和设置哪些东西,有点晕。^_^ 有的说只安装一个交叉编译器cross-3.2.tar.bz2就可以了。 还有的说要: 下载源代码包: binutils-2. ...… 查看全部问答∨ |
各位能否提供一份基于wince的网络电话的evc代码,或提供些思路,小弟不胜感激。 邮箱:yangyang_1980_ren@yahoo.com.cn… 查看全部问答∨ |
本帖最后由 dontium 于 2015-1-23 13:30 编辑 [摘要] LED 已经成为移动电话中电影照明和相机闪光灯的标准解决方案。对于更高画质和更高分辨率的需求,要求更亮的闪光灯 LED 解决方案。所面临的挑战是如何通过实现最高效率的解决方案来从电池中 ...… 查看全部问答∨ |
|
无操作系统,采用定时中断的方式,现在想让KL46在每次中断产生处理完事物后进入低功耗模式, 然后每个中断唤醒(唤醒后处理事物)。 另外还有一种状态是当系统进入待机状态后,切换进入低功耗模式,这个时候不在通过定时器唤醒了, 而是通过ADC ...… 查看全部问答∨ |