一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ZYNQ - 以太網(wǎng)遠(yuǎn)程更新貼片SD卡/TF卡應(yīng)用程序

深圳市雷龍發(fā)展有限公司 ? 2023-06-16 09:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

寫在前面

對(duì)于ZYNQ系列的板卡固化,可以通過JTAG接口,使用SDK固化到FLASH中,或者可將SD卡取出將SD卡中保存的固化工程進(jìn)行修改,但在很多情況下,離線更新會(huì)很不方便,本文借鑒網(wǎng)上常見的遠(yuǎn)程更新QSPI FLASH的相關(guān)示例,對(duì)表貼式SD卡的應(yīng)用程序進(jìn)行了在線更新的操作適配,便于ZYNQ設(shè)備進(jìn)行遠(yuǎn)程更新保存在表貼式SD卡中的固化程序。

傳統(tǒng)SD卡與表貼SD卡區(qū)別

對(duì)于傳統(tǒng)SD卡,直接將SD卡取出,使用讀卡器進(jìn)行脫機(jī)更新很方便,但是由于SD卡插拔時(shí)容易損壞,對(duì)于一些需要SD卡設(shè)備,但需要高可靠性的應(yīng)用場(chǎng)景,使用傳統(tǒng)的SD卡托很容易造成卡托和TF卡的脫落,很難保持SD卡長(zhǎng)時(shí)間的穩(wěn)定讀取。

相比傳統(tǒng)的SD卡,使用表貼式的SD卡,將會(huì)增加系統(tǒng)的可靠性和穩(wěn)定性,這里硬件方案選擇雷龍公司的NAND Flash(貼片式TF卡)CSNP4GCR01-AMW,產(chǎn)品說明如下:

image.php?url=YD_cnt_79_01NJ7ZgHaQnU

?

相比傳統(tǒng)的SD卡,表貼式SD卡除了保留了SD卡大容量容易讀寫操作的特點(diǎn)外,在PCB板上的占用面積也相比傳統(tǒng)表貼卡托的面積要小。對(duì)傳統(tǒng)的SD卡的電路設(shè)計(jì)可實(shí)現(xiàn)快速替代。

程序簡(jiǎn)述說明

程序大體框架借鑒了正點(diǎn)原子的遠(yuǎn)程更新的例程架構(gòu),只對(duì)更新QSPI的部分進(jìn)行改寫替換,替換成對(duì)SD卡的固化程序進(jìn)行更新的相關(guān)代碼。本文使用的板卡為PYNQ-Z2,這里只是為了驗(yàn)證表貼SD卡的功能,使用轉(zhuǎn)接板對(duì)傳統(tǒng)的SD卡進(jìn)行了替代。相關(guān)樣片和轉(zhuǎn)接板樣品可在雷龍公司官網(wǎng)進(jìn)行申請(qǐng)?jiān)囉谩?/p>

大致實(shí)現(xiàn)功能為:用 LWIP 協(xié)議棧的 tcp 協(xié)議實(shí)現(xiàn)遠(yuǎn)程更新 表貼SD卡的功能,當(dāng)輸入“ update”命令時(shí)更新 SD卡并反饋信息,當(dāng)輸入“ clear”命令時(shí)之前傳輸?shù)臄?shù)據(jù)無效。

硬件平臺(tái)搭建

新建工程,創(chuàng)建 block design。添加ZYNQ7 IP,對(duì)zynq進(jìn)行初始化配置,對(duì)應(yīng)板卡配置勾選SD,UART以及ENET資源,

image.php?url=YD_cnt_79_01NJ7ZuPQFUx

?

如使用相同型號(hào)的板卡,可設(shè)置該部分為相同配置。

image.php?url=YD_cnt_79_01NJ7ZscxpIB

?

勾選DDR,并設(shè)置為PYNQZ2板卡的DDR的信息,

image.php?url=YD_cnt_79_01NJ7ZriEkq6

?

取消勾選多余資源,點(diǎn)擊OK,完成硬件設(shè)計(jì)。如下圖:

image.php?url=YD_cnt_79_01NJ7ZqTVAjC

?

然后我們進(jìn)行g(shù)enerate output product 然后生成HDL封裝。這里沒有進(jìn)行使用PL資源,也不需要進(jìn)行綜合布局,在導(dǎo)出硬件時(shí)也不用包含bit流文件。

SDK軟件部分

打開SDK后,新建application project,這里為了方便lwip設(shè)置,可選用使用lwip的相關(guān)模板,這里選擇lwip tcp回環(huán)測(cè)試模板,保存新建工程。

image.php?url=YD_cnt_79_01NJ7ZpJc75Z

?

選中新建好的工程,選擇右擊選中設(shè)置板載支持包,除了勾選lwip的板級(jí)支持包外,還需勾選sd卡需要的文件模式支持包。

image.php?url=YD_cnt_79_01NJ7ZoEZkth

編輯

?

點(diǎn)擊standalone下的xilffs,可以對(duì)文件系統(tǒng)進(jìn)行配置,這里可以使能長(zhǎng)文件名有效,改變勾選為true。

保留模板例程的中的platform配置文件,刪除其余文件。

image.php?url=YD_cnt_79_01NJ7ZoOZcq0

?

修改main.c文件

修改main.c文件為如下:

#include

#include "xparameters.h"

#include "netif/xadapter.h"

#include "platform.h"

#include "platform_config.h"

#include "lwipopts.h"

#include "xil_printf.h"

#include "sleep.h"

#include "lwip/priv/tcp_priv.h"

#include "lwip/init.h"

#include "lwip/inet.h"

#if LWIP_IPV6==1

#include "lwip/ip6_addr.h"

#include "lwip/ip6.h"

#else

#if LWIP_DHCP==1

#include "lwip/dhcp.h"

extern volatile int dhcp_timoutcntr;

#endif

#define DEFAULT_IP_ADDRESS "192.168.1.10"

#define DEFAULT_IP_MASK "255.255.255.0"

#define DEFAULT_GW_ADDRESS "192.168.1.1"

#endif /* LWIP_IPV6 */

extern volatile int TcpFastTmrFlag;

extern volatile int TcpSlowTmrFlag;

void platform_enable_interrupts(void);

void start_application(void);

void print_app_header(void);

int transfer_data();

struct netif server_netif;

#if LWIP_IPV6==1

static void print_ipv6(char *msg, ip_addr_t *ip)

{

print(msg);

xil_printf(" %s\n\r", inet6_ntoa(*ip));

}

#else

static void print_ip(char *msg, ip_addr_t *ip)

{

print(msg);

xil_printf("%d.%d.%d.%d\r\n", ip4_addr1(ip), ip4_addr2(ip),

ip4_addr3(ip), ip4_addr4(ip));

}

static void print_ip_settings(ip_addr_t *ip, ip_addr_t *mask, ip_addr_t *gw)

{

print_ip("Board IP: ", ip);

print_ip("Netmask : ", mask);

print_ip("Gateway : ", gw);

}

static void assign_default_ip(ip_addr_t *ip, ip_addr_t *mask, ip_addr_t *gw)

{

int err;

xil_printf("Configuring default IP %s \r\n", DEFAULT_IP_ADDRESS);

err = inet_aton(DEFAULT_IP_ADDRESS, ip);

if (!err)

xil_printf("Invalid default IP address: %d\r\n", err);

err = inet_aton(DEFAULT_IP_MASK, mask);

if (!err)

xil_printf("Invalid default IP MASK: %d\r\n", err);

err = inet_aton(DEFAULT_GW_ADDRESS, gw);

if (!err)

xil_printf("Invalid default gateway address: %d\r\n", err);

}

#endif /* LWIP_IPV6 */

int main(void)

{

struct netif *netif;

//設(shè)置開發(fā)板的MAC地址

unsigned char mac_ethernet_address[] = {

0x00, 0x0a, 0x35, 0x00, 0x01, 0x02 };

netif = &server_netif;

init_platform();

print_app_header();

//初始化lwIP

lwip_init();

//將網(wǎng)絡(luò)接口添加到netif,并將其設(shè)置為默認(rèn)值

if (!xemac_add(netif, NULL, NULL, NULL, mac_ethernet_address,

PLATFORM_EMAC_BASEADDR)) {

xil_printf("Error adding N/W interface\r\n");

return -1;

}

#if LWIP_IPV6==1

netif->ip6_autoconfig_enabled = 1;

netif_create_ip6_linklocal_address(netif, 1);

netif_ip6_addr_set_state(netif, 0, IP6_ADDR_VALID);

print_ipv6("\n\rlink local IPv6 address is:", &netif->ip6_addr[0]);

#endif /* LWIP_IPV6 */

netif_set_default(netif);

//使能中斷

platform_enable_interrupts();

//指定網(wǎng)絡(luò)是否已啟動(dòng)

netif_set_up(netif);

#if (LWIP_IPV6==0)

#if (LWIP_DHCP==1)

//創(chuàng)建新的DHCP客戶端

dhcp_start(netif);

dhcp_timoutcntr = 2;

while (((netif->ip_addr.addr) == 0) && (dhcp_timoutcntr > 0))

xemacif_input(netif);

if (dhcp_timoutcntr <= 0) {

if ((netif->ip_addr.addr) == 0) {

xil_printf("ERROR: DHCP request timed out\r\n");

assign_default_ip(&(netif->ip_addr),

&(netif->netmask), &(netif->gw));

}

}

#else

assign_default_ip(&(netif->ip_addr), &(netif->netmask), &(netif->gw));

#endif

print_ip_settings(&(netif->ip_addr), &(netif->netmask), &(netif->gw));

#endif /* LWIP_IPV6 */

//啟動(dòng)應(yīng)用程序

start_application();

while (1) {

if (TcpFastTmrFlag) {

tcp_fasttmr();

TcpFastTmrFlag = 0;

}

if (TcpSlowTmrFlag) {

tcp_slowtmr();

TcpSlowTmrFlag = 0;

}

xemacif_input(netif);

transfer_data();

}

cleanup_platform();

return 0;

}

添加remote_update.h文件

#ifndef REMOTE_UPDATE_H_

#define REMOTE_UPDATE_H_

#include "xparameters.h"

#include "xtime_l.h"

#include "xstatus.h"

#include

//服務(wù)器端口

#define SER_PORT 5678

//接收的最大文件大小16MB

#define MAX_FLASH_LEN 16*1024*1024

void sent_msg(const char *msg);

#endif

添加remote_update.c文件

#include "remote_update.h"

#include "xparameters.h"

#include "ff.h"

#include "string.h"

#include

#include "lwip/err.h"

#include "lwip/tcp.h"

#include "xil_printf.h"

u8 start_update_flag = 0;

u8 rxbuffer[MAX_FLASH_LEN];

u32 total_bytes = 0;

#define FILE_NAME "BOOT.bin"

struct tcp_pcb *c_pcb;

FATFS fs;

void print_app_header()

{

xil_printf("-----SD remote update demo------\n");

}

//掛載sd卡

void sd_mount(){

FRESULT status;

BYTE work[FF_MAX_SS];

//掛載sd卡,注冊(cè)文件系統(tǒng)對(duì)象

status=f_mount(&fs,"",1);

if(status != FR_OK){

printf("%d\n",status);

printf("It isn't FAT format\n");

f_mkfs("",FM_FAT32,0,work,sizeof work);

f_mount(&fs,"",1);

}

}

//寫數(shù)據(jù)

void sd_write_data(u8 wr_dat[], u32 wr_len){

FIL fil;

UINT bw;

//創(chuàng)建或者打開文件

f_open(&fil,FILE_NAME,FA_CREATE_ALWAYS | FA_WRITE | FA_READ);

//移動(dòng)讀寫指針

f_lseek(&fil, 0);

//寫數(shù)據(jù)

f_write(&fil,wr_dat,wr_len,&bw);

//關(guān)閉文件

f_close(&fil);

}

//將接收到的BOOT.bin文件寫入到SD中

int transfer_data()

{

char msg[60];

if (start_update_flag) {

xil_printf("\r\nStart SD Update!\r\n");

xil_printf("file size of BOOT.bin is %lu Bytes\r\n", total_bytes);

sprintf(msg, "file size of BOOT.bin is %lu Bytes\r\n",total_bytes);

sent_msg(msg);

sd_write_data(rxbuffer,total_bytes);

xil_printf("SD Update finish!\n");

total_bytes = 0;

}

start_update_flag = 0;

return 0;

}

//向客戶端回送信息

void sent_msg(const char *msg)

{

err_t err;

tcp_nagle_disable(c_pcb);

if (tcp_sndbuf(c_pcb) > strlen(msg)) {

err = tcp_write(c_pcb, msg, strlen(msg), TCP_WRITE_FLAG_COPY);

if (err != ERR_OK)

xil_printf("tcp_server: Error on tcp_write: %d\r\n", err);

err = tcp_output(c_pcb);

if (err != ERR_OK)

xil_printf("tcp_server: Error on tcp_output: %d\r\n", err);

} else

xil_printf("no space in tcp_sndbuf\r\n");

}

//接收回調(diào)函數(shù)

static err_t recv_callback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)

{

struct pbuf *q;

if (!p) {

tcp_close(tpcb);

tcp_recv(tpcb, NULL);

xil_printf("tcp connection closed\r\n");

return ERR_OK;

}

q = p;

if (q->tot_len == 6 && !(memcmp("update", p->payload, 6))) {

start_update_flag = 1;

sent_msg("\r\nStart SD Update\r\n");

} else if (q->tot_len == 5 && !(memcmp("clear", p->payload, 5))) {

start_update_flag = 0;

total_bytes = 0;

sent_msg("Clear received data\r\n");

xil_printf("Clear received data\r\n");

} else {

while (q->tot_len != q->len) {

memcpy(&rxbuffer[total_bytes], q->payload, q->len);

total_bytes += q->len;

q = q->next;

}

memcpy(&rxbuffer[total_bytes], q->payload, q->len);

total_bytes += q->len;

}

tcp_recved(tpcb, p->tot_len);

pbuf_free(p);

return ERR_OK;

}

err_t accept_callback(void *arg, struct tcp_pcb *newpcb, err_t err)

{

xil_printf("tcp_server: Connection Accepted\r\n");

c_pcb = newpcb; //保存連接的客戶端PCB

//設(shè)置接收回調(diào)

tcp_recv(c_pcb, recv_callback);

tcp_arg(c_pcb, NULL);

return ERR_OK;

}

int start_application()

{

struct tcp_pcb *pcb;

err_t err;

//掛載SD卡

sd_mount();

xil_printf("Successfully init SD\r\n");

print_app_header();

//創(chuàng)建TCP PCB

pcb = tcp_new_ip_type(IPADDR_TYPE_ANY);

if (!pcb) {

xil_printf("Error creating PCB. Out of Memory\n\r");

return -1;

}

//綁定端口號(hào)

err = tcp_bind(pcb, IP_ANY_TYPE, SER_PORT);

if (err != ERR_OK) {

xil_printf("Unable to bind to port %d: err = %d\n\r", SER_PORT, err);

return -2;

}

//此處不需要回調(diào)函數(shù)的任何參數(shù)

tcp_arg(pcb, NULL);

//偵聽連接

pcb = tcp_listen(pcb);

if (!pcb) {

xil_printf("Out of memory while tcp_listen\n\r");

return -3;

}

//指定用于傳入連接的回調(diào)

tcp_accept(pcb, accept_callback);

xil_printf("TCP server started @ port %d\n\r", SER_PORT);

return 0;

}

完成代碼編寫后,進(jìn)行燒寫驗(yàn)證。

下載驗(yàn)證

打開網(wǎng)絡(luò)調(diào)試助手,選擇協(xié)議類型為TCP客戶端,選擇遠(yuǎn)程主機(jī)的IP地址和端口,選擇需要加載的應(yīng)用程序的bin文件,勾選加載文件數(shù)據(jù)源,點(diǎn)擊發(fā)送。

image.php?url=YD_cnt_79_01NJ7ZnBel7P

?

發(fā)送完成后在發(fā)送框選擇輸入“update”更新SD卡的應(yīng)用程序。

image.php?url=YD_cnt_79_01NJ7ZmYmvMA

?

串口終端中查看調(diào)試信息,表示SD卡程序更新完成。

image.php?url=YD_cnt_79_01NJ7ZkVNnYW

?

使用讀卡器查看貼片SD卡轉(zhuǎn)接卡是否正常存儲(chǔ)到SD卡中,讀取文件可知已經(jīng)正常寫入。

image.php?url=YD_cnt_79_01NJ7Zja2nuZ

?

將板卡啟動(dòng)模式調(diào)整至SD卡模式,上電重啟板卡程序,觀察到板卡程序成功啟動(dòng)。

image.php?url=YD_cnt_79_01NJ7ZktuXOr

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    578

    瀏覽量

    65622
  • NAND閃存
    +關(guān)注

    關(guān)注

    2

    文章

    227

    瀏覽量

    23365
  • 存儲(chǔ)芯片
    +關(guān)注

    關(guān)注

    11

    文章

    933

    瀏覽量

    44124
  • Nand flash
    +關(guān)注

    關(guān)注

    7

    文章

    243

    瀏覽量

    40774
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是SD、TF寫保護(hù)?寫保護(hù)的常見原因

    部分SDTF適配器或套上設(shè)有物理寫保護(hù)開關(guān),當(dāng)開關(guān)滑動(dòng)到"鎖定"位置時(shí),卡片會(huì)自動(dòng)進(jìn)入寫保護(hù)狀態(tài)。這是最常見也是最容易解決的寫保護(hù)原
    的頭像 發(fā)表于 06-10 00:00 ?889次閱讀
    什么是<b class='flag-5'>SD</b><b class='flag-5'>卡</b>、<b class='flag-5'>TF</b><b class='flag-5'>卡</b>寫保護(hù)?寫保護(hù)的常見原因

    科普|一文帶你認(rèn)清SD、TF、SIM及eSIM,高手請(qǐng)忽略!

    1.定義SD是SecureDigitalCard的英文縮寫,直譯就是“安全數(shù)字”。一般用于數(shù)碼相機(jī)等,作外存儲(chǔ)器用。TF即是T-Fla
    的頭像 發(fā)表于 05-21 15:56 ?966次閱讀
    科普|一文帶你認(rèn)清<b class='flag-5'>SD</b><b class='flag-5'>卡</b>、<b class='flag-5'>TF</b><b class='flag-5'>卡</b>、SIM及eSIM<b class='flag-5'>卡</b>,高手請(qǐng)忽略!

    深度剖析 STM32?搭配 SD、SD NAND(貼片式T)存儲(chǔ)于心電監(jiān)測(cè)設(shè)備的全方位評(píng)測(cè)

    于心電監(jiān)測(cè)設(shè)備,本文將深入探討STM32對(duì)應(yīng)存儲(chǔ)芯片 SD NAND(貼片SD、貼片TF
    的頭像 發(fā)表于 05-06 13:58 ?1268次閱讀
    深度剖析 STM32?搭配 <b class='flag-5'>SD</b><b class='flag-5'>卡</b>、<b class='flag-5'>SD</b> NAND(<b class='flag-5'>貼片</b>式T<b class='flag-5'>卡</b>)存儲(chǔ)于心電監(jiān)測(cè)設(shè)備的全方位評(píng)測(cè)

    [上手體驗(yàn)]雷龍SD NAND:比TF更小更耐用

    和SPI FLASH以及 NAND FLASH,基本沒聽說過SD NAND。查閱了雷龍官方介紹),得知SD NAND俗稱貼片TF,雖然
    發(fā)表于 03-08 14:28

    SD卡座和TF卡座作為電子設(shè)備中的儲(chǔ)存槽兩者各有哪些特點(diǎn)

    SD卡座和TF卡座作為現(xiàn)代電子設(shè)備中不可或缺的存儲(chǔ)接口,各自具備獨(dú)特的特點(diǎn)和適用場(chǎng)景。在深入探討這兩者之間的區(qū)別之前,連欣科技認(rèn)為首先需要了解它們的基本概念。SD卡座是專門為SD
    的頭像 發(fā)表于 01-14 15:06 ?2296次閱讀
    <b class='flag-5'>SD</b>卡座和<b class='flag-5'>TF</b>卡座作為電子設(shè)備中的儲(chǔ)存<b class='flag-5'>卡</b>槽兩者各有哪些特點(diǎn)

    tf與云存儲(chǔ)的比較 tf的兼容性問題

    TF(通常指Micro SD)與云存儲(chǔ)在數(shù)據(jù)存儲(chǔ)領(lǐng)域各有其特點(diǎn)和優(yōu)勢(shì),同時(shí)也存在一些差異。以下是兩者之間的比較,以及關(guān)于TF
    的頭像 發(fā)表于 12-19 15:24 ?3507次閱讀

    tf存儲(chǔ)容量選擇 tf的常見故障及解決方法

    TF存儲(chǔ)容量選擇 TF(TransFlash)是一種小型的存儲(chǔ),廣泛應(yīng)用于手機(jī)、相機(jī)、平
    的頭像 發(fā)表于 12-19 15:20 ?2764次閱讀

    雷龍CS SD NAND:貼片TF體驗(yàn)與性能測(cè)試

    最近有幸獲得了雷龍發(fā)展提供的貼片TF樣品,收到的快遞中包含兩片 CS SD NAND 芯片和一個(gè)轉(zhuǎn)接板。以下是芯片和轉(zhuǎn)接板的實(shí)物照片: 產(chǎn)品簡(jiǎn)介 此次測(cè)試的芯片型號(hào)
    發(fā)表于 11-26 10:04

    Arduino程序:實(shí)現(xiàn)SD NAND(貼片sd)的讀寫功能

    []()   官方給的轉(zhuǎn)接板上,沒有相應(yīng)的電容電阻,當(dāng)TF測(cè)試的時(shí)候不需要焊接相應(yīng)的電容電阻(大量的時(shí)候按官網(wǎng)的電路);直接芯片焊上,插上貼片
    發(fā)表于 11-07 17:45

    使用TF的常見問題

    隨著科技的發(fā)展,TF(TransFlash,也稱為MicroSD)已經(jīng)成為我們?nèi)粘I钪胁豢苫蛉钡拇鎯?chǔ)工具。它們被廣泛應(yīng)用于智能手機(jī)、平板電腦、數(shù)碼相機(jī)等設(shè)備中,用于擴(kuò)展存儲(chǔ)空間
    的頭像 發(fā)表于 11-04 09:54 ?3644次閱讀

    TFSD的區(qū)別

    在數(shù)字時(shí)代,存儲(chǔ)成為了我們生活中不可或缺的一部分。無論是手機(jī)、相機(jī)還是平板電腦,都需要存儲(chǔ)來擴(kuò)展存儲(chǔ)空間。TFSD
    的頭像 發(fā)表于 11-04 09:50 ?2520次閱讀

    具有PMIC和汽車以太網(wǎng)的AM263x控制

    電子發(fā)燒友網(wǎng)站提供《具有PMIC和汽車以太網(wǎng)的AM263x控制.pdf》資料免費(fèi)下載
    發(fā)表于 10-31 09:33 ?0次下載
    具有PMIC和汽車<b class='flag-5'>以太網(wǎng)</b>的AM263x控制<b class='flag-5'>卡</b>

    這樣設(shè)計(jì)SD/TF的PCB更高效、更可靠!

    ,例如數(shù)碼相機(jī)、平板電腦和多媒體播放器等。 TF 是一種小型的SD,它可以通過SD轉(zhuǎn)換使用
    的頭像 發(fā)表于 09-03 17:05 ?1463次閱讀
    這樣設(shè)計(jì)<b class='flag-5'>SD</b>/<b class='flag-5'>TF</b><b class='flag-5'>卡</b>的PCB更高效、更可靠!

    這樣設(shè)計(jì)SD/TF的PCB更高效、更可靠!

    ,例如數(shù)碼相機(jī)、平板電腦和多媒體播放器等。 TF是一種小型的SD,它可以通過SD轉(zhuǎn)換使
    發(fā)表于 09-03 17:01

    MK米客方德存儲(chǔ)TFSD的詳細(xì)解讀

    在這個(gè)數(shù)字化時(shí)代,數(shù)據(jù)存儲(chǔ)變得至關(guān)重要。TF(TransFlash)和SD(Secure Digital
    的頭像 發(fā)表于 09-02 11:03 ?1334次閱讀
    MK米客方德存儲(chǔ)<b class='flag-5'>卡</b>:<b class='flag-5'>TF</b><b class='flag-5'>卡</b>與<b class='flag-5'>SD</b><b class='flag-5'>卡</b>的詳細(xì)解讀