【GD32450I-EVAL】+10SD卡测试
本帖最后由 DDZZ669 于 2020-10-17 21:37 编辑<p cid="n0" mdtype="paragraph">SD卡,即安全数码卡(Secure Digital ),GD32的SDIO接口可以用来驱动SD卡,另外,SDIO还定义了SD I/O卡、多媒体卡(MMC)和CE-ATA卡主机接口。</p>
<p cid="n2" mdtype="paragraph"> </p>
<h1 cid="n3" mdtype="heading">1 SD卡基础介绍</h1>
<h2 cid="n4" mdtype="heading">1.1 接口</h2>
<p cid="n5" mdtype="paragraph">板子上的SD卡接口原理图:</p>
<p cid="n5" mdtype="paragraph"></p>
<h2 cid="n8" mdtype="heading">1.2 SD卡与microSD卡</h2>
<p cid="n9" mdtype="paragraph">microSD卡又叫TF卡,是SD卡的缩小版,平时用的较多也是microSD,也经常习惯把microSD卡叫做SD卡。</p>
<p cid="n9" mdtype="paragraph"></p>
<h2 cid="n11" mdtype="heading">1.3 容量</h2>
<ul>
<li cid="n12" mdtype="paragraph">SDSC:标准容量卡(Secure Digital Standard Capacity),上限至2GB,支持FAT 12, 16格式</li>
<li cid="n12" mdtype="paragraph">SDHC:高容量卡(Secure Digital High Capacity),2GB至 32GB,支持FAT 32格式</li>
<li cid="n12" mdtype="paragraph">SDXC:容量扩大化卡(Secure Digital eXtended Capacity)32GB至2TB,支持exFAT格式</li>
</ul>
<p cid="n13" mdtype="paragraph"> </p>
<h1 cid="n14" mdtype="heading">2 SDIO</h1>
<h2 cid="n15" mdtype="heading">2.1 基本结构</h2>
<p cid="n16" mdtype="paragraph">GD32的SDIO 的结构框图如下图,主要由APB 接口和SDIO 适配器两大部分组成。</p>
<p cid="n16" mdtype="paragraph"></p>
<p cid="n19" mdtype="paragraph">APB 接口:包括通过APB2 总线访问的寄存器、用于数据传输的FIFO 单元以及产生中断和DMA 请求信号。</p>
<ul cid="n20" data-mark="-" mdtype="list">
<li cid="n21" mdtype="list_item">
<p cid="n22" mdtype="paragraph">寄存器单元:包含所有的系统寄存器,生成信号用于控制卡与控制器之间的通信。</p>
</li>
<li cid="n23" mdtype="list_item">
<p cid="n24" mdtype="paragraph">数据FIFO 单元:有一个数据缓冲区,用于发送和接收 FIFO</p>
</li>
</ul>
<p cid="n25" mdtype="paragraph">SDIO 适配器:由控制单元、命令单元和数据单元组成。控制单元管理时钟信号,命令单元管理命令的传输,数据单元管理数据的传输。</p>
<ul cid="n26" data-mark="-" mdtype="list">
<li cid="n27" mdtype="list_item">
<p cid="n28" mdtype="paragraph">SDIO_CLK:SDIO 控制器提供给卡的时钟。每个时钟周期在命令线(SDIO_CMD)和所有的数据线(SDIO_DAT)上直接发送一位命令或数据。对于SD卡可以在0 MHz 到25 MHz。</p>
</li>
<li cid="n29" mdtype="list_item">
<p cid="n30" mdtype="paragraph">SDIO_CMD:该信号是双向命令通道,用于卡的初始化和命令的传输。命令从SDIO 控制器发送到卡,响应从卡发送到主机。</p>
</li>
<li cid="n31" mdtype="list_item">
<p cid="n32" mdtype="paragraph">SDIO_DAT:这些信号线都是双向数据通道。数据信号线操作在推挽模式。每次只有卡或者主机会驱动这些信号。默认情况下,上电或者复位后仅 DAT0 用于数据传输。</p>
</li>
</ul>
<h2 cid="n33" mdtype="heading">2.2 寄存器</h2>
<ul>
<li cid="n34" mdtype="paragraph">SD卡有一些特殊功能寄存器</li>
<li cid="n35" mdtype="paragraph">CID:宽度128位,卡标识号,每个读 写( RW )卡应具有唯一的标识号。</li>
<li cid="n35" mdtype="paragraph">RCA:宽度16位,卡相对地址,在初始化的时候确定。</li>
<li cid="n35" mdtype="paragraph">CSD:宽度128位,卡描述数据:卡操作条件的信息。</li>
<li cid="n35" mdtype="paragraph">SCR:宽度64位,SD卡配置寄存器:SD卡特定信息数据。</li>
<li cid="n35" mdtype="paragraph">OCR:宽度32位,操作条件寄存。</li>
</ul>
<h2 cid="n36" mdtype="heading">2.3 命令</h2>
<p cid="n37" mdtype="paragraph">SDIO通过发送各种命令的方式来操作SD卡,如下图:</p>
<p cid="n37" mdtype="paragraph"></p>
<p> </p>
<p>程序中的命令列表:</p>
<div aria-label="代码段 小部件" contenteditable="false" role="region" tabindex="-1">
<pre data-widget="codesnippet">
<code class="language-cpp hljs"><span class="hljs-comment">/* SD memory card bus commands index */</span>
<span class="hljs-preprocessor">#define SD_CMD_GO_IDLE_STATE ((uint8_t)0) /* CMD0, GO_IDLE_STATE */</span>
<span class="hljs-preprocessor">#define SD_CMD_ALL_SEND_CID ((uint8_t)2) /* CMD2, ALL_SEND_CID */</span>
<span class="hljs-preprocessor">#define SD_CMD_SEND_RELATIVE_ADDR ((uint8_t)3) /* CMD3, SEND_RELATIVE_ADDR */</span>
<span class="hljs-preprocessor">#define SD_CMD_SET_DSR ((uint8_t)4) /* CMD4, SET_DSR */</span>
<span class="hljs-preprocessor">#define SD_CMD_SWITCH_FUNC ((uint8_t)6) /* CMD6, SWITCH_FUNC */</span>
<span class="hljs-preprocessor">#define SD_CMD_SELECT_DESELECT_CARD ((uint8_t)7) /* CMD7, SELECT_DESELECT_CARD */</span>
<span class="hljs-preprocessor">#define SD_CMD_SEND_IF_COND ((uint8_t)8) /* CMD8, SEND_IF_COND */</span>
<span class="hljs-preprocessor">#define SD_CMD_SEND_CSD ((uint8_t)9) /* CMD9, SEND_CSD */</span>
<span class="hljs-preprocessor">#define SD_CMD_SEND_CID ((uint8_t)10)/* CMD10, SEND_CID */</span>
<span class="hljs-preprocessor">#define SD_CMD_STOP_TRANSMISSION ((uint8_t)12)/* CMD12, STOP_TRANSMISSION */</span>
<span class="hljs-preprocessor">#define SD_CMD_SEND_STATUS ((uint8_t)13)/* CMD13, SEND_STATUS */</span>
<span class="hljs-preprocessor">#define SD_CMD_GO_INACTIVE_STATE ((uint8_t)15)/* CMD15, GO_INACTIVE_STATE */</span>
<span class="hljs-preprocessor">#define SD_CMD_SET_BLOCKLEN ((uint8_t)16)/* CMD16, SET_BLOCKLEN */</span>
<span class="hljs-preprocessor">#define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17)/* CMD17, READ_SINGLE_BLOCK */</span>
<span class="hljs-preprocessor">#define SD_CMD_READ_MULTIPLE_BLOCK ((uint8_t)18)/* CMD18, READ_MULTIPLE_BLOCK */</span>
<span class="hljs-preprocessor">#define SD_CMD_WRITE_BLOCK ((uint8_t)24)/* CMD24, WRITE_BLOCK */</span>
<span class="hljs-preprocessor">#define SD_CMD_WRITE_MULTIPLE_BLOCK ((uint8_t)25)/* CMD25, WRITE_MULTIPLE_BLOCK */</span>
<span class="hljs-preprocessor">#define SD_CMD_PROG_CSD ((uint8_t)27)/* CMD27, PROG_CSD */</span>
<span class="hljs-preprocessor">#define SD_CMD_SET_WRITE_PROT ((uint8_t)28)/* CMD28, SET_WRITE_PROT */</span>
<span class="hljs-preprocessor">#define SD_CMD_CLR_WRITE_PROT ((uint8_t)29)/* CMD29, CLR_WRITE_PROT */</span>
<span class="hljs-preprocessor">#define SD_CMD_SEND_WRITE_PROT ((uint8_t)30)/* CMD30, SEND_WRITE_PROT */</span>
<span class="hljs-preprocessor">#define SD_CMD_ERASE_WR_BLK_START ((uint8_t)32)/* CMD32, ERASE_WR_BLK_START */</span>
<span class="hljs-preprocessor">#define SD_CMD_ERASE_WR_BLK_END ((uint8_t)33)/* CMD33, ERASE_WR_BLK_END */</span>
<span class="hljs-preprocessor">#define SD_CMD_ERASE ((uint8_t)38)/* CMD38, ERASE */</span>
<span class="hljs-preprocessor">#define SD_CMD_LOCK_UNLOCK ((uint8_t)42)/* CMD42, LOCK_UNLOCK */</span>
<span class="hljs-preprocessor">#define SD_CMD_APP_CMD ((uint8_t)55)/* CMD55, APP_CMD */</span>
<span class="hljs-preprocessor">#define SD_CMD_GEN_CMD ((uint8_t)56)/* CMD56, GEN_CMD */</span>
<span class="hljs-comment">/* SD memory card application specific commands index */</span>
<span class="hljs-preprocessor">#define SD_APPCMD_SET_BUS_WIDTH ((uint8_t)6) /* ACMD6, SET_BUS_WIDTH */</span>
<span class="hljs-preprocessor">#define SD_APPCMD_SD_STATUS ((uint8_t)13)/* ACMD13, SD_STATUS */</span>
<span class="hljs-preprocessor">#define SD_APPCMD_SEND_NUM_WR_BLOCKS ((uint8_t)22)/* ACMD22, SEND_NUM_WR_BLOCKS */</span>
<span class="hljs-preprocessor">#define SD_APPCMD_SET_WR_BLK_ERASE_COUNT ((uint8_t)23)/* ACMD23, SET_WR_BLK_ERASE_COUNT */</span>
<span class="hljs-preprocessor">#define SD_APPCMD_SD_SEND_OP_COND ((uint8_t)41)/* ACMD41, SD_SEND_OP_COND */</span>
<span class="hljs-preprocessor">#define SD_APPCMD_SET_CLR_CARD_DETECT ((uint8_t)42)/* ACMD42, SET_CLR_CARD_DETECT */</span>
<span class="hljs-preprocessor">#define SD_APPCMD_SEND_SCR ((uint8_t)51)/* ACMD51, SEND_SCR */</span></code></pre>
<img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" /><span style="background:rgba(220,220,220,0.5);background-image:url(https://bbs.eeworld.com.cn/static/editor/plugins/widget/images/handle.png)"><img height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15" /></span></div>
<h1 cid="n42" mdtype="heading">3 例子程序分析</h1>
<h2 cid="n43" mdtype="heading">3.1 SD卡初始化</h2>
<div aria-label="代码段 小部件" contenteditable="false" role="region" tabindex="-1">
<pre data-widget="codesnippet">
<code class="language-cpp hljs">sd_error_enum sd_config(<span class="hljs-keyword">void</span>)
{
sd_error_enum status = SD_OK;
uint32_t cardstate = <span class="hljs-number">0</span>;
<span class="hljs-comment">/* initialize the card */</span>
status = sd_init();<span class="hljs-comment">//SD卡初始化---GPIO、SDIO</span>
<span class="hljs-keyword">if</span>(SD_OK == status)
{
status = sd_card_information_get(&sd_cardinfo);<span class="hljs-comment">//获取SD卡信息</span>
}
<span class="hljs-keyword">if</span>(SD_OK == status)
{
status = sd_card_select_deselect(sd_cardinfo.card_rca);<span class="hljs-comment">//挂载SD卡</span>
}
status = sd_cardstatus_get(&cardstate);
<span class="hljs-keyword">if</span>(cardstate & <span class="hljs-number">0x02000000</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n the card is locked!"</span>);
<span class="hljs-keyword">while</span> (<span class="hljs-number">1</span>){
}
}
<span class="hljs-keyword">if</span> ((SD_OK == status) && (!(cardstate & <span class="hljs-number">0x02000000</span>)))
{
<span class="hljs-comment">/* set bus mode */</span>
status = sd_bus_mode_config(SDIO_BUSMODE_4BIT);<span class="hljs-comment">//配置总线模式</span>
}
<span class="hljs-keyword">if</span> (SD_OK == status)
{
<span class="hljs-comment">/* set data transfer mode */</span>
status = sd_transfer_mode_config( SD_POLLING_MODE );<span class="hljs-comment">//配置传输模式</span>
}
<span class="hljs-keyword">return</span> status;
}</code></pre>
<img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" /><span style="background:rgba(220,220,220,0.5);background-image:url(https://bbs.eeworld.com.cn/static/editor/plugins/widget/images/handle.png)"><img height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15" /></span></div>
<h2 cid="n45" mdtype="heading">3.2 读取SD卡基本信息</h2>
<p cid="n46" mdtype="paragraph">包括sd卡的版本,类型,容量,块大小与数量等。</p>
<div aria-label="代码段 小部件" contenteditable="false" role="region" tabindex="-1">
<pre data-widget="codesnippet">
<code class="language-cpp hljs"><span class="hljs-keyword">void</span> card_info_get(<span class="hljs-keyword">void</span>)
{
uint8_t sd_spec, sd_spec3, sd_spec4, sd_security;
uint32_t block_count, block_size;
uint16_t temp_ccc;
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Card information:"</span>);
<span class="hljs-comment">//SD卡版本</span>
sd_spec = (sd_scr[<span class="hljs-number">1</span>] & <span class="hljs-number">0x0F000000</span>) >> <span class="hljs-number">24</span>;
sd_spec3 = (sd_scr[<span class="hljs-number">1</span>] & <span class="hljs-number">0x00008000</span>) >> <span class="hljs-number">15</span>;
sd_spec4 = (sd_scr[<span class="hljs-number">1</span>] & <span class="hljs-number">0x00000400</span>) >> <span class="hljs-number">10</span>;
<span class="hljs-keyword">if</span>(<span class="hljs-number">2</span> == sd_spec)
{
<span class="hljs-keyword">if</span>(<span class="hljs-number">1</span> == sd_spec3)
{
<span class="hljs-keyword">if</span>(<span class="hljs-number">1</span> == sd_spec4)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Card version 4.xx ##"</span>);
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Card version 3.0x ##"</span>);
}
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Card version 2.00 ##"</span>);
}
}
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(<span class="hljs-number">1</span> == sd_spec)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Card version 1.10 ##"</span>);
}
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(<span class="hljs-number">0</span> == sd_spec)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Card version 1.0x ##"</span>);
}
<span class="hljs-comment">//SD卡类型</span>
sd_security = (sd_scr[<span class="hljs-number">1</span>] & <span class="hljs-number">0x00700000</span>) >> <span class="hljs-number">20</span>;
<span class="hljs-keyword">if</span>(<span class="hljs-number">2</span> == sd_security)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## SDSC card ##"</span>);<span class="hljs-comment">//标准容量卡SDSC,最大2G</span>
}
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(<span class="hljs-number">3</span> == sd_security)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## SDHC card ##"</span>);<span class="hljs-comment">//高容量卡SDHC,最大32G</span>
}
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(<span class="hljs-number">4</span> == sd_security)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## SDXC card ##"</span>);
}
block_count = (sd_cardinfo.card_csd.c_size + <span class="hljs-number">1</span>)*<span class="hljs-number">1024</span>;
block_size = <span class="hljs-number">512</span>;
<span class="hljs-comment">//SD卡容量</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Device size is %dKB ##"</span>, sd_card_capacity_get());
<span class="hljs-comment">//SD卡 块的大小</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Block size is %dB ##"</span>, block_size);
<span class="hljs-comment">//SD卡 块的个数</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Block count is %d ##"</span>, block_count);
<span class="hljs-keyword">if</span>(sd_cardinfo.card_csd.read_bl_partial)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Partial blocks for read allowed ##"</span> );
}
<span class="hljs-keyword">if</span>(sd_cardinfo.card_csd.write_bl_partial)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Partial blocks for write allowed ##"</span> );
}
<span class="hljs-comment">//SD卡 卡命令集</span>
temp_ccc = sd_cardinfo.card_csd.ccc;
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## CardCommandClasses is: %x ##"</span>, temp_ccc);
<span class="hljs-keyword">if</span>((SD_CCC_BLOCK_READ & temp_ccc) && (SD_CCC_BLOCK_WRITE & temp_ccc))
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Block operation supported ##"</span>);
}
<span class="hljs-keyword">if</span>(SD_CCC_ERASE & temp_ccc)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Erase supported ##"</span>);
}
<span class="hljs-keyword">if</span>(SD_CCC_WRITE_PROTECTION & temp_ccc)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Write protection supported ##"</span>);
}
<span class="hljs-keyword">if</span>(SD_CCC_LOCK_CARD & temp_ccc)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Lock unlock supported ##"</span>);
}
<span class="hljs-keyword">if</span>(SD_CCC_APPLICATION_SPECIFIC & temp_ccc)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Application specific supported ##"</span>);
}
<span class="hljs-keyword">if</span>(SD_CCC_IO_MODE & temp_ccc)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## I/O mode supported ##"</span>);
}
<span class="hljs-keyword">if</span>(SD_CCC_SWITCH & temp_ccc)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n## Switch function supported ##"</span>);
}
}</code></pre>
<img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" /><span style="background:rgba(220,220,220,0.5);background-image:url(https://bbs.eeworld.com.cn/static/editor/plugins/widget/images/handle.png)"><img height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15" /></span></div>
<h2 cid="n48" mdtype="heading">3.3 SD卡测试</h2>
<div aria-label="代码段 小部件" contenteditable="false" role="region" tabindex="-1">
<pre data-widget="codesnippet">
<code class="language-cpp hljs"><span class="hljs-comment">//开始SD卡测试</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n\r\n Card test:"</span>);
<span class="hljs-comment">/* single block operation test=============单个块读写测试============= */</span>
sd_error = sd_block_write(buf_write, <span class="hljs-number">100</span>*<span class="hljs-number">512</span>, <span class="hljs-number">512</span>);<span class="hljs-comment">//---------写入数据</span>
<span class="hljs-keyword">if</span>(SD_OK != sd_error)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Block write fail!"</span>);
<span class="hljs-comment">/* turn on LED1, LED3 and turn off LED2 */</span>
gd_eval_led_on(LED1);
gd_eval_led_on(LED3);
gd_eval_led_off(LED2);
<span class="hljs-keyword">while</span> (<span class="hljs-number">1</span>)
{
}
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Block write success!"</span>);
}
sd_error = sd_block_read(buf_read, <span class="hljs-number">100</span>*<span class="hljs-number">512</span>, <span class="hljs-number">512</span>);<span class="hljs-comment">//-----------读取数据</span>
<span class="hljs-keyword">if</span>(SD_OK != sd_error)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Block read fail!"</span>);
<span class="hljs-comment">/* turn on LED1, LED3 and turn off LED2 */</span>
gd_eval_led_on(LED1);
gd_eval_led_on(LED3);
gd_eval_led_off(LED2);
<span class="hljs-keyword">while</span> (<span class="hljs-number">1</span>)
{
}
}<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Block read success!"</span>);
<span class="hljs-comment">//打印读取到的数据</span>
pdata = (uint8_t *)buf_read;
<span class="hljs-comment">/* print data by USART */</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n"</span>);
<span class="hljs-keyword">for</span>(i = <span class="hljs-number">0</span>; i < <span class="hljs-number">128</span>; i++)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" %3d %3d %3d %3d "</span>, *pdata, *(pdata+<span class="hljs-number">1</span>), *(pdata+<span class="hljs-number">2</span>), *(pdata+<span class="hljs-number">3</span>));
pdata += <span class="hljs-number">4</span>;
<span class="hljs-keyword">if</span>(<span class="hljs-number">0</span> == (i + <span class="hljs-number">1</span>) % <span class="hljs-number">4</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n"</span>);
}
}
}
<span class="hljs-comment">/* lock and unlock operation test */</span>
<span class="hljs-keyword">if</span>(SD_CCC_LOCK_CARD & sd_cardinfo.card_csd.ccc)
{
<span class="hljs-comment">/* lock the card */</span>
sd_error = sd_lock_unlock(SD_LOCK); <span class="hljs-comment">//-----------SD卡加锁</span>
<span class="hljs-keyword">if</span>(SD_OK != sd_error)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Lock failed!"</span>);
<span class="hljs-comment">/* turn on LED1, LED3 and turn off LED2 */</span>
gd_eval_led_on(LED1);
gd_eval_led_on(LED3);
gd_eval_led_off(LED2);
<span class="hljs-keyword">while</span> (<span class="hljs-number">1</span>)
{
}
}<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n The card is locked!"</span>);
}
sd_error = sd_erase(<span class="hljs-number">100</span>*<span class="hljs-number">512</span>, <span class="hljs-number">101</span>*<span class="hljs-number">512</span>);<span class="hljs-comment">//-------------SD卡擦除</span>
<span class="hljs-keyword">if</span>(SD_OK != sd_error)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Erase failed!"</span>);
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Erase success!"</span>);
}
<span class="hljs-comment">/* unlock the card */</span>
sd_error = sd_lock_unlock(SD_UNLOCK);<span class="hljs-comment">//--------------SD卡解锁</span>
<span class="hljs-keyword">if</span>(SD_OK != sd_error)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Unlock failed!"</span>);
<span class="hljs-comment">/* turn on LED1, LED3 and turn off LED2 */</span>
gd_eval_led_on(LED1);
gd_eval_led_on(LED3);
gd_eval_led_off(LED2);
<span class="hljs-keyword">while</span> (<span class="hljs-number">1</span>){
}
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n The card is unlocked!"</span>);
}
sd_error = sd_erase(<span class="hljs-number">100</span>*<span class="hljs-number">512</span>, <span class="hljs-number">101</span>*<span class="hljs-number">512</span>);<span class="hljs-comment">//------------SD卡擦除</span>
<span class="hljs-keyword">if</span>(SD_OK != sd_error){
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Erase failed!"</span>);
}<span class="hljs-keyword">else</span>{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Erase success!"</span>);
}
sd_error = sd_block_read(buf_read, <span class="hljs-number">100</span>*<span class="hljs-number">512</span>, <span class="hljs-number">512</span>);<span class="hljs-comment">//--------------SD卡读取</span>
<span class="hljs-keyword">if</span>(SD_OK != sd_error)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Block read fail!"</span>);
<span class="hljs-comment">/* turn on LED1, LED3 and turn off LED2 */</span>
gd_eval_led_on(LED1);
gd_eval_led_on(LED3);
gd_eval_led_off(LED2);
<span class="hljs-keyword">while</span> (<span class="hljs-number">1</span>){
}
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Block read success!"</span>);
pdata = (uint8_t *)buf_read;
<span class="hljs-comment">/* print data by USART */</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n"</span>);
<span class="hljs-keyword">for</span>(i = <span class="hljs-number">0</span>; i < <span class="hljs-number">128</span>; i++)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" %3d %3d %3d %3d "</span>, *pdata, *(pdata+<span class="hljs-number">1</span>), *(pdata+<span class="hljs-number">2</span>), *(pdata+<span class="hljs-number">3</span>));
pdata += <span class="hljs-number">4</span>;
<span class="hljs-keyword">if</span>(<span class="hljs-number">0</span> == (i + <span class="hljs-number">1</span>) % <span class="hljs-number">4</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n"</span>);
}
}
}
}
<span class="hljs-comment">/* multiple blocks operation test =============多个块读写测试============= */</span>
sd_error = sd_multiblocks_write(buf_write, <span class="hljs-number">200</span>*<span class="hljs-number">512</span>, <span class="hljs-number">512</span>, <span class="hljs-number">3</span>);<span class="hljs-comment">//----------多个块写入数据</span>
<span class="hljs-keyword">if</span>(SD_OK != sd_error)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Multiple block write fail!"</span>);
<span class="hljs-comment">/* turn on LED1, LED3 and turn off LED2 */</span>
gd_eval_led_on(LED1);
gd_eval_led_on(LED3);
gd_eval_led_off(LED2);
<span class="hljs-keyword">while</span> (<span class="hljs-number">1</span>){
}
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Multiple block write success!"</span>);
}
sd_error = sd_multiblocks_read(buf_read, <span class="hljs-number">200</span>*<span class="hljs-number">512</span>, <span class="hljs-number">512</span>, <span class="hljs-number">3</span>);<span class="hljs-comment">//------------多个块读取数据</span>
<span class="hljs-keyword">if</span>(SD_OK != sd_error)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Multiple block read fail!"</span>);
<span class="hljs-comment">/* turn on LED1, LED3 and turn off LED2 */</span>
gd_eval_led_on(LED1);
gd_eval_led_on(LED3);
gd_eval_led_off(LED2);
<span class="hljs-keyword">while</span> (<span class="hljs-number">1</span>){
}
}
<span class="hljs-keyword">else</span>
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n Multiple block read success!"</span>);
pdata = (uint8_t *)buf_read;
<span class="hljs-comment">/* print data by USART */</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n"</span>);
<span class="hljs-keyword">for</span>(i = <span class="hljs-number">0</span>; i < <span class="hljs-number">512</span>; i++)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" %3d %3d %3d %3d "</span>, *pdata, *(pdata+<span class="hljs-number">1</span>), *(pdata+<span class="hljs-number">2</span>), *(pdata+<span class="hljs-number">3</span>));
pdata += <span class="hljs-number">4</span>;
<span class="hljs-keyword">if</span>(<span class="hljs-number">0</span> == (i + <span class="hljs-number">1</span>) % <span class="hljs-number">4</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\r\n"</span>);
}
}
}</code></pre>
<img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" /><span style="background:rgba(220,220,220,0.5);background-image:url(https://bbs.eeworld.com.cn/static/editor/plugins/widget/images/handle.png)"><img height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15" /></span></div>
<h2 cid="n50" mdtype="heading">3.4 测试结果</h2>
<p cid="n51" mdtype="paragraph">通过串口打印测试结果,从结果来看,测试用到的microSD卡为:4.xx版的SDHC大容量卡,16GB(15441920KB),支持块操作,支持加锁解锁操作。</p>
<p cid="n52" mdtype="paragraph">数据读写测试了单个块写入读取与多个块写入读取正常,在加锁后则无法读取,解锁后可正常读取。</p>
<p> </p>
<p> </p>
<div aria-label="代码段 小部件" contenteditable="false" role="region" tabindex="-1">
<pre data-widget="codesnippet">
<code class="language-bash hljs">Card init success!
Card information:
<span class="hljs-comment">## Card version 4.xx ##</span>
<span class="hljs-comment">## SDHC card ##</span>
<span class="hljs-comment">## Device size is 15441920KB ##</span>
<span class="hljs-comment">## Block size is 512B ##</span>
<span class="hljs-comment">## Block count is 30883840 ##</span>
<span class="hljs-comment">## CardCommandClasses is: db7 ##</span>
<span class="hljs-comment">## Block operation supported ##</span>
<span class="hljs-comment">## Erase supported ##</span>
<span class="hljs-comment">## Lock unlock supported ##</span>
<span class="hljs-comment">## Application specific supported ##</span>
<span class="hljs-comment">## Switch function supported ##</span>
Card test:
Block write success!
Block <span class="hljs-built_in">read</span> success!
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">2</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">3</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">4</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">5</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">6</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">7</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
...略去若干行
<span class="hljs-number">112</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">113</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">114</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">115</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">116</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">117</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">118</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">119</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">120</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">121</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">122</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">123</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">124</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">125</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">126</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">127</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
The card is locked!
Erase failed!
The card is unlocked!
Erase success!
Block <span class="hljs-built_in">read</span> success!
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
...略去若干行
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
Multiple block write success!
Multiple block <span class="hljs-built_in">read</span> success!
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">2</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">3</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">4</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">5</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">6</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">7</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
...略去若干行
<span class="hljs-number">112</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">113</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">114</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">115</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">116</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">117</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">118</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">119</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">120</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">121</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">122</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">123</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">124</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">125</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">126</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">127</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">128</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">129</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">130</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">131</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">132</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">133</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">134</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">135</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
...略去若干行
<span class="hljs-number">236</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">237</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">238</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">239</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">240</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">241</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">242</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">243</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">244</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">245</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">246</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">247</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">248</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">249</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">250</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">251</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">252</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">253</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">254</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">255</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">1</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">2</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">3</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">4</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">5</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">6</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">7</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
...略去若干行
<span class="hljs-number">112</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">113</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">114</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">115</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">116</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">117</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">118</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">119</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">120</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">121</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">122</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">123</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">124</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">125</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">126</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span><span class="hljs-number">127</span> <span class="hljs-number">1</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
...略去若干行
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
<span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span>
</code></pre>
<img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" /><span style="background:rgba(220,220,220,0.5);background-image:url(https://bbs.eeworld.com.cn/static/editor/plugins/widget/images/handle.png)"><img height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15" /></span></div>
<p> </p>
<p>感谢分享,每一个测评都做得这么认真!</p>
<p><a href="https://bbs.eeworld.com.cn/thread-1140981-1-1.html" target="_blank">兆易GD32450I-EVAL</a></p>
<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1140981-1-1.html">https://bbs.eeworld.com.cn/thread-1140981-1-1.html</a></p>
页:
[1]