1. SDIO 接口简述
SDIO 接口用于访问 MMC 卡,SD 存储卡或者 SDI/O 卡的接口标准。
这里要做的是 Micro SDCard,也就是 TF Card(存储卡)的操作。属于第二种。
本实验中使用的Micro SD卡属于SDSC(标准容量,最大两G)卡。介绍卡的种类是因为SD协议中的命令也支持这三种类型的卡,因此对STM32中的SDIO接口进行初始化后,上电后就要对接入的卡进行检测、分类,这个过程是通过向卡发送一系列不同的命令,根据卡不同的响应来进行分类。
2. Micro SD 卡
Micro SD 卡就是 TF Card 的意思,是小的 SD Card。一张SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5个部分。存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;电源检测单元保证SD卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;卡及接口控制单元控制SD卡的运行状态,它包括有8个寄存器;接口驱动器控制SD卡引脚的输入输出。
可以看到,卡对外交互的引脚有:
CLK:时钟线,由SDIO主机产生,即由STM32控制器输出;
CMD:命令控制线,SDIO主机通过该线发送命令控制SD卡,如果命令要求SD卡提供应答(响应),SD卡也是通过该线传输应答信息;
D[0-3]:数据线,传输读写数据;SD卡可将D0拉低表示忙状态;
VDD、VSS1、VSS2:电源和地信号。
上述引脚定义了整个卡的传输模式:即,支持4线并行传输,数据同步传输,支持命令的交互。
虽然可以共用总线,但不推荐多卡槽共用总线信号,要求一个单独SD总线应该连接一个单独的SD卡,总线的结构为:
具体的硬件原理图如下所示:
测试用卡:某东上买的卡,品牌:Kingston,Micro SDHC,Class 10, 大小 16GB,直接插上卡座即可。
3. SD 协议
关于 SD Card 的所有协议定义,都遵循标准的 SD 组织定义的协议,参考:
《Physical Layer Simplified Specification V2.0》
协议中规定了物理层数据传送,Timing,频率,状态,寄存器等等。
3.1 传输特性
SD 总线通信是基于命令和数据传输的。通讯由一个起始位("0"),由一个停止位("1")终止。
数据传送 MSB,上升沿有效。
传输的时候,发送命令,仅仅使用 CMD 线,能够支持开启 4 线进行数据的发送和接收。
使用4数据线传输时,每次传输4bit数据,每根数据线都必须有起始位、终止位以及CRC位,CRC位每根数据线都要分别检查,并把检查结果汇总然后在数据传输完后通过D0线反馈给主机。
SD卡数据包有两种格式,一种是常规数据(8bit宽),它先发低字节再发高字节,而每个字节则是先发高位再发低位
4线同步发送,每根线发送一个字节的其中两个位,数据位在四线顺序排列发送,DAT3数据线发较高位,DAT0数据线发较低位。
另外一种数据包发送格式是宽位数据包格式,对SD卡而言宽位数据包发送方式是针对SD卡SSR(SD状态)寄存器内容发送的,SSR寄存器总共有512bit,在主机发出ACMD13命令后SD卡将SSR寄存器内容通过DAT线发送给主机。
3.2 CMD&RSP 命令以及响应
3.2.1 CMD 命令包格式
SD 命令格式固定为 48bit,都是通过 CMD 线连续传输的(数据线不参与):
SD命令的组成如下:
起始位和终止位:命令的主体包含在起始位与终止位之间,它们都只包含一个数据位,起始位为0,终止位为1。
传输标志:用于区分传输方向,该位为1时表示命令,方向为主机传输到SD卡,该位为0时表示响应,方向为SD卡传输到主机。
命令主体内容包括命令、地址信息/参数和CRC校验三个部分。
命令号:它固定占用6bit,所以总共有64个命令(代号:CMD0~CMD63),每个命令都有特定的用途,部分命令不适用于SD卡操作,只是专门用于MMC卡或者SD I/O卡。
地址/参数:每个命令有32bit地址信息/参数用于命令附加内容,例如,广播命令没有地址信息,这32bit用于指定参数,而寻址命令这32bit用于指定目标SD卡的地址。
CRC7校验:长度为7bit的校验位用于验证命令传输内容正确性,如果发生外部干扰导致传输数据个别位状态改变将导致校准失败,也意味着命令传输失败,SD卡不执行命令。
3.2.2 CMD 命令类型
SD命令有4种类型:
无响应广播命令(bc),发送到所有卡,不返回任务响应;
带响应广播命令(bcr),发送到所有卡,同时接收来自所有卡响应;
寻址命令(ac),发送到选定卡,DAT线无数据传输;
寻址数据传输命令(adtc),发送到选定卡,DAT线有数据传输。
另外,SD卡主机模块系统旨在为各种应用程序类型提供一个标准接口。在此环境中,需要有特定的客户/应用程序功能。为实现这些功能,在标准中定义了两种类型的通用命令:特定应用命令(ACMD)和常规命令(GEN_CMD)。要使用SD卡制造商特定的ACMD命令如ACMD6,需要在发送该命令之前发送CMD55命令,告知SD卡接下来的命令为特定应用命令。CMD55命令只对紧接的第一个命令有效,SD卡如果检测到CMD55之后的第一条命令为ACMD则执行其特定应用功能,如果检测发现不是ACMD命令,则执行标准命令。
任何的 ACMD 命令之前,都需要先发送 CMD55 命令,来标记此处将会发送一个 ACMD 命令。
3.2.3 CMD 命令交互
SD总线的基本交互是命令与响应交互,即,使用 CMD 线发送命令,然后接收来自 CMD 的 RSP(如果有响应的话):
SD数据是以块(Black)形式传输的,SDHC卡数据块长度一般为512字节,数据可以从主机到卡,也可以是从卡到主机。数据块需要CRC位来保证数据传输成功。CRC位由SD卡系统硬件生成。STM32控制器可以控制使用单线或4线传输,本开发板设计使用4线传输。
SD数据传输支持单块和多块读写,它们分别对应不同的操作命令,多块写入还需要使用命令来停止整个写入操作。数据写入前需要检测SD卡忙状态,因为SD卡在接收到数据后编程到存储区过程需要一定操作时间。SD卡忙状态通过把D0线拉低表示。数据块读操作与之类似,只是无需忙状态检测。命令格式
3.2.4 CMD 命令描述
SD卡系统的命令被分为多个类,每个类支持一种"卡的功能设置"。下面列举了SD卡部分命令信息,更多详细信息可以参考SD简易规格文件说明,表中填充位和保留位都必须被设置为0。
3.2.5 RSP 命令的响应
响应由SD卡向主机发出,部分命令要求SD卡作出响应,这些响应多用于反馈SD卡的状态。SDIO总共有7个响应类型(代号:R1~R7),其中SD卡没有R4、R5类型响应。特定的命令对应有特定的响应类型,比如当主机发送CMD3命令时,可以得到响应R6。与命令一样,SD卡的响应也是通过CMD线连续传输的。根据响应内容大小可以分为短响应和长响应。短响应是 48bit 长度,只有R2类型是长响应,其长度为136bit。各个类型响应具体情况。
特别注意:除了R3类型之外,其他响应都使用CRC7校验来校验,对于R2类型是使用CID和CSD寄存器内部CRC7。
3.3 SD卡的模式
3.3.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卡都有几种状态,通过命令控制实现卡状态的切换。
3.3.2 卡识别模式
在卡识别模式下,主机会复位所有处于"卡识别模式"的SD卡,确认其工作电压范围,识别SD卡类型,并且获取SD卡的相对地址(卡相对地址较短,便于寻址)。在卡识别过程中,要求SD卡工作在识别时钟频率FOD的状态下。卡识别模式下SD卡状态转换:
主机上电后,所有卡处于空闲状态,包括当前处于无效状态的卡。主机也可以发送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之后也进入数据传输模式。
3.3.3 数据传输模式
只有SD卡系统处于数据传输模式下才可以进行数据读写操作。数据传输模式下可以将主机SD时钟频率设置为FPP,默认最高为25MHz,频率切换可以通过CMD4命令来实现。数据传输模式下,SD卡状态转换过程:
CMD7用来选定和取消指定的卡,卡在待机状态下还不能进行数据通信,因为总线上可能有多个卡都是出于待机状态,必须选择一个RCA地址目标卡使其进入传输状态才可以进行数据通信。同时通过CMD7命令也可以让已经被选择的目标卡返回到待机状态。
数据传输模式下的数据通信都是主机和目标卡之间通过寻址命令点对点进行的。卡处于传输状态下可以使用表 362中面向块的读写以及擦除命令对卡进行数据读写、擦除。CMD12可以中断正在进行的数据通信,让卡返回到传输状态。CMD0和CMD15会中止任何数据编程操作,返回卡识别模式,这可能导致卡数据被损坏。
3.4 SD卡时钟频率
识别模式下的SD时钟需要在 400KHz,识别模式转成传送模式后,可以直接将频率提高到 24MHz
3.5 SD卡宽总线选择
启动上电默认进入识别模式,默认使用总线宽度为 1 bit,在进入传输模式后,可以先获取到卡的 SCR 寄存器,再在寄存器中找到对应的是否支持 4 bit 模式的标志位,最后使用 CMD55 + ACMD6 来告诉 SD Card 开启 4bit 模式传输。
3.6 SD 卡内部寄存器描述
上述寄存器都是通过发送特定的指令进行访问的。
其中, CSD 寄存器表征 SD Card 的大小,Block Size,以及如果是 V2 一下的卡的话,是否支持 Block 内进行读写。
CSR 状态寄存器,返回的是卡当前的状态,能够用于区分当前卡是否正在 Programing 等等。
3.7 SD 卡读/写/擦除
3.7.1 SD 卡读
SD 卡的读,分为两种方式的读:
读一个 block:发送 CMD17 命令
读多个 block:发送 CMD18 命令,需要主动发送 CMD12 停止传送命令才会停止动作。
3.7.2 SD 卡写
写一个 block:发送 CMD24 命令
写多个 block:发送 CMD25 命令,需要主动发送 CMD12 停止传送命令才会停止动作。
与读不一样,写的话,数据到达 SD Card 侧的硬件 Buffer 后,需要一些时间进行内部的 Programme,此刻,对外就是一个 busy的状态:
这里需要注意的是,在 Spec 中描述:
在多块连续写入的时候,需要先去 pre-erase,即使用 CMD55+ACMD23 命令进行预擦除
3.7.3 SD 卡擦除
卡的擦除操作,顺序发送 CMD32(擦除的起始地址), CMD33(擦除的结束地址), CMD38(开始擦除)。
4. STM32F103ZTE6 的 SD 功能
SDIO包含2个部分:
● SDIO适配器模块:实现所有MMC/SD/SD I/O卡的相关功能,如时钟的产生、命令和数据的传送。
● AHB总线接口:操作SDIO适配器模块中的寄存器,并产生中断和 DMA 请求信号。
复位后默认情况下SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度。
4.1 SDIO 适配器
4.2 SDIO 控制单元
控制单元负责电源管理和时钟分频管理。时钟部分,来自 AHB 的时钟。
4.3 SDIO 命令通道
命令通道单元向卡发送命令并从卡接收响应。
命令通道有对应的硬件状态机实现:
命令通道状态机(CPSM):当写入命令寄存器并设置了使能位,开始发送命令。命令发送完成时,命令通道状态机(CPSM)设置状态标志并在不需要响应时进入空闲状态(见下图)。当收到响应后,接收到的CRC码将会与内部产生的CRC码比较,然后设置相应的状态标志。
当进入等待(Wait)状态时,命令定时器开始运行;当CPSM进入接收(Receive)状态之前,产生了超时,则设置超时标志并进入空闲(Idle)状态。
注意:命令超时固定为 64 个 SDIO_CK 时钟周期。
注意:CPSM 保持在空闲状态至少 8 个 SDIO_CK 周期,以满足 NCC 和 NRC 时序限制。 NCC 是两个主机命令间的最小间隔; NRC 是主机命令与卡响应之间的最小间隔。(这个是 Spec 的规定)
状态机如下:
4.4 SDIO 数据通道
数据通道子单元在主机与卡之间传输数据。下图是数据通道的框图。
在时钟控制寄存器中可以配置卡的数据总线宽度。如果选择了4位总线模式,则每个时钟周期四条数据信号线(SDIO_D[3:0])上将传输4位数据;如果选择了8位总线模式,则每个时钟周期八条数据信号线(SDIO_D[7:0])上将传输8位数据;如果没有选择宽总线模式,则每个时钟周期只在SDIO_D0上传输1位数据。
根据传输的方向(发送或接收),使能时数据通道状态机(DPSM)将进入Wait_S或Wait_R状态:
● 发送:DPSM进入Wait_S状态。如果发送FIFO中有数据,则DPSM进入发送状态,同时数据通道子单元开始向卡发送数据。
● 接收:DPSM进入Wait_R状态并等待开始位;当收到开始位时,DPSM进入接收状态,同时数据通道子单元开始从卡接收数据。
数据通道状态机(DPSM):DPSM工作在SDIO_CK频率,卡总线信号与SDIO_CK的上升沿同步。DPSM有6个状态,
4.5 数据FIFO
数据FIFO(先进先出)部件是一个数据缓冲器,带发送和接收单元。控制器的FIFO包含宽度为32bit、深度为32字的数据缓冲器和发送/接收逻辑。其中SDIO状态寄存器(SDIO_STA)的TXACT位用于指示当前正在发送数据,RXACT位指示当前正在接收数据,这两个位不可能同时为1。
当TXACT为1时,可以通过APB2接口将数据写入到传输FIFO。
当RXACT为1时,接收FIFO存放从数据路径部件接收到的数据。
根据FIFO空或满状态会把SDIO_STA寄存器位值1,并可以产生中断和DMA请求。
5. 代码流程
1. 配置 NVIC 控制器,开启 SDIO 中断
2. 配置 GPIO 口,复用推挽输出
3. 开启 SDIO/DMA2 模块时钟
4. 进入卡上电流程
5. 进入卡的初始化流程(识别),并转换到 Transfer 模式
6. 提高 SDCLK 的频率
7. 选择卡
8. 开启 4 bit 模式
5.1 识别模式代码
NVIC 和 GPIO ,SDIO 和 DMA2 的基础配置如下:
static void SK_SD_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Configure the NVIC Preemption Priority Bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
static void SK_SD_GPIOConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*!< GPIOC and GPIOD Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , ENABLE);
/*!< Configure PC.08, PC.09, PC.10, PC.11, PC.12 pin: D0, D1, D2, D3, CLK pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/*!< Configure PD.02 CMD line */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
static void SK_SDIO_Config(void)
{
/*!< Enable the SDIO AHB Clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, ENABLE);
SDIO_DeInit();
}
static void SK_SDIO_DMA2Config(void)
{
/*!< Enable the DMA2 Clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
}
这里我将所有的命令CMD 和 回应 RSP的 检查全部封装成为函数的形式:
/************************** SD CMD Defination Start *********************************/
void SK_SdioSendCmd_0(void)
{
SDIO_CmdInitTypeDef stSdioCmdInit;
stSdioCmdInit.SDIO_Argument = 0x0;
stSdioCmdInit.SDIO_CmdIndex = SD_CMD_GO_IDLE_STATE; //cmd0
stSdioCmdInit.SDIO_Response = SDIO_Response_No;
stSdioCmdInit.SDIO_Wait = SDIO_Wait_No;
stSdioCmdInit.SDIO_CPSM = SDIO_CPSM_Enable;
SDIO_SendCommand(&stSdioCmdInit);
}
void SK_SdioSendCmd_8(void)
{
SDIO_CmdInitTypeDef stSdioCmdInit;
stSdioCmdInit.SDIO_Argument = SD_CHECK_PATTERN;
stSdioCmdInit.SDIO_CmdIndex = SDIO_SEND_IF_COND; // cmd8
stSdioCmdInit.SDIO_Response = SDIO_Response_Short;// Rsp = r7
stSdioCmdInit.SDIO_Wait = SDIO_Wait_No;
stSdioCmdInit.SDIO_CPSM = SDIO_CPSM_Enable;
SDIO_SendCommand(&stSdioCmdInit);
}
void SK_SdioSendCmd_55(uint32_t rca)
{
SDIO_CmdInitTypeDef stSdioCmdInit;
stSdioCmdInit.SDIO_Argument = (uint32_t) rca << 16;
stSdioCmdInit.SDIO_CmdIndex = SD_CMD_APP_CMD;
上一篇:STM32F103ZET6 — SPI
下一篇:STM32 启动过程简述
推荐阅读
史海拾趣
博巨兴公司一直注重技术研发和自主创新,近年来公司研发费用投入均占当年销售额的10%以上。凭借科学的管理手段和雄厚的技术力量,公司于2006年被认定为“深圳市软件企业”,2007年被认定为“深圳市高新技术企业”,2011年更是荣获“国家高新技术企业”称号。这些荣誉的获得不仅是对公司技术实力的认可,也为公司的进一步发展奠定了坚实基础。
随着技术的不断进步,AnalogicTech始终保持对创新的追求。公司研发团队不断攻克技术难关,推出了一系列具有高性能、高稳定性的产品。其中,公司的LED背光驱动器系列在市场中取得了显著的成功,为公司的快速发展奠定了坚实的基础。
随着产品线的不断完善,AITSEMI公司开始积极寻求市场机会,并逐步在全球范围内建立销售网络。通过与各大消费电子品牌的紧密合作,AITSEMI的芯片产品成功应用于音频功放和电源管理等领域,为全球消费者提供了更优质的产品体验。同时,公司还积极拓展医疗、工业控制、照明等新兴市场,为公司的持续增长提供了强大的动力。
Babcock Inc公司的创立源于创始人对电子技术的深厚热爱和前瞻视野。在创业初期,公司便致力于电子技术的研发与创新,不断积累核心技术和专利。通过持续的技术投入和人才培养,Babcock逐渐在电子行业崭露头角,为后续的快速发展奠定了坚实的基础。
银河微电自成立之初,便专注于半导体分立器件的研发与生产。面对国内外市场的激烈竞争,公司坚持自主创新,不断投入研发力量,终于在某关键技术上取得了重大突破。这一技术突破不仅提高了产品的性能,还降低了生产成本,使得银河微电的产品在市场上更具竞争力。凭借这一技术优势,银河微电逐渐在行业中树立起了自己的地位。
除了关注经济效益外,Coors Components Inc公司还积极履行社会责任。公司积极参与公益事业,为社会做出贡献;同时,公司也注重环保和可持续发展,努力降低生产过程中的环境污染。这些举措不仅提升了公司的品牌形象,还赢得了社会各界的广泛赞誉。
以上是关于电子行业公司发展的通用框架,你可以根据这些框架来进一步了解“Coors Components Inc”公司的具体发展故事。请注意,在编写故事时,应确保所描述的事实准确无误,避免夸大或缩小事实。
要求2006年7月1日开始,电子电气设备中禁止使用铅、汞、六价铬、镉和多溴联苯(PBB)、多溴二苯醚(PBDE);其中镉限量指标 100PPm(0.01%),另五种限量l000ppm(0.1%)。企业出口欧盟的产品都需符合以上的限量要求,并且要展示相应的证明文件, ...… 查看全部问答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 03:44 编辑 三极管,电子元件,在我们平时所看到的电路板中有很多,三极管工作起来呢就像个水龙头,一个进水的的地方(NPN的集电极,PNP的射电极),一个出水的地方(NPN的射电极),还有就是龙头的把手了(基极 ...… 查看全部问答∨ |
我做的是PCI的驱动,用VC6 DDK来实现。板卡桥芯片用的是9052做的驱动中设置中断可是没有反应这是为什么呢?将9052的 LINTi1接了个开关,模拟实现中断的电平输入。相关程序如下: //获取中断资源 case CmResourceTypeInterrupt: &n ...… 查看全部问答∨ |
各位大侠,我想问下,过程性连续赋值语句的最大特点是什么啊? 我还想问下,过程性连续赋值语句对于reg变量是不是不支持啊? 我最近用quartusII仿真程序,在全编译的时候出现procedural continuous assignment to register is not su ...… 查看全部问答∨ |
|
我下载了WTL80,发现该目录下有个文件夹“AppWizCE”,要怎样才能使EVC下能够通过AppWizard来创建ATL/WTL个工程呢? 如果不能通过AppWizard来创建,evc下如何建立ATL/WTL的exe工程?… 查看全部问答∨ |
我将bin目录下的exe文件和sdf数据库文件复制到wince设备上,运行exe文件就报异常。 异常信息: Error SmartDevice.exe MissingMethodException File or assembly name \'System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKe ...… 查看全部问答∨ |
最近发现一个问题,使用IAR的编译优化的时候,对采样数据有很大的影响。现在做的这个项目使用STM32101 64K的片子,程序到47K了,但还没有做完,于是想试下IAR4.41的优化功能,选择High(Maximun Optimization),编译出来有31K多,心 ...… 查看全部问答∨ |