D X如何设置大容量存储控制器

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
大容量OTP存储器的设计与研究.pdf68页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:100 &&
大容量OTP存储器的设计与研究.pdf
你可能关注的文档:
··········
··········
大容量O T P 存储器的设计与研究
微电子学与固体电子学
座机电话号码3007
李 平 教 授
__________
大容量O TP 存储器的设计与研究________
题名和副题名)
作者姓名)
指 导 教 __________ 李 平 _________________
教 授 ________
_________ 电子科技大学______ 成
姓名、职称、单位名称)
申请学位级另£_
学科专■业
微电子学与固体电子学
提交论文日期
论文答辩日期
2014.05_________
学位授予单位和日其I
电子科技大学
2 0 1 4 年 0 6 月 2 7
答辩委员会主席_____________________________________
评阅A _____________________________________________________________
注 明 《国际十进分类法UDC 》的类号。
DESIGN AND RESEARCH OF HIGH CAPACITY
OTP MEMORY
A Master Thesis Submi
University of Electronic Science and Technology of China
Major:_______ Microelectronics and Solid-State Electronics
Author:_______________________
He Yafan________________
Advisor:____________________Professor Li Ping____________
School of Microelectronics and Solid-State Electronics
正在加载中,请稍后...设备描述: [H:]USB Mass Storage Device(Generic Flash Disk) 设备类型: 大容量存储设_百度知道
具体你要问什么啊,我看你识别出来很OK嘛。
这么屌,量产直接找生产商就OK了,难道你想自己生产啊。。
量产数据-_-|||
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁8225人阅读
[Cocos2d-x相关教程来源于红孩儿的游戏编程之路CSDN博客地址:
红孩儿Cocos2d-X学习园地QQ3群:870848
& & & & & &Cocos2d-x 深入解析系列:以XML文件方式保存用户数据
另:本章所用Cocos2d-x版本为:&
& & & & & & &&大家好,今天我们来学习一下如何使用XML文件方式来保存游戏中的用户数据。在使用Cocos2d-x开发游戏的过程中,我们经常会使用XML来存储用户存档数据,而这些XML我们该如何生成呢?Cocos2d-x提供了一个类CCUserDefault以方便我们随时将需要的数据生成XML文件。
打开CCUserDefault.h:
#ifndef __SUPPORT_CCUSERDEFAULT_H__
#define __SUPPORT_CCUSERDEFAULT_H__
//加入平台所用的头文件
#include &platform/CCPlatformMacros.h&
#include &string&
//使用Cocos2d命名空间
NS_CC_BEGIN
//定义类CCUserDefault
class CC_DLL CCUserDefault
~CCUserDefault();
//从指定的键中取得布尔值
getBoolForKey(const char* pKey);
//从指定的键中取得布尔值,如果没有则返回默认参数
getBoolForKey(const char* pKey, bool defaultValue);
//从指定的键中取得整数值
getIntegerForKey(const char* pKey);
//从指定的键中取得整数值,如果没有则返回默认参数
getIntegerForKey(const char* pKey, int defaultValue);
//从指定的键中取得浮点值
getFloatForKey(const char* pKey);
//从指定的键中取得浮点值,如果没有则返回默认参数
getFloatForKey(const char* pKey, float defaultValue);
//从指定的键中取得双精度值
getDoubleForKey(const char* pKey);
//从指定的键中取得双精度值,如果没有则返回默认参数
getDoubleForKey(const char* pKey, double defaultValue);
//从指定的键中取得字符串值
std::string getStringForKey(const char* pKey);
//从指定的键中取得字符串值,如果没有则返回默认参数
std::string getStringForKey(const char* pKey, const std::string & defaultValue);
//设置指定键的布尔值
setBoolForKey(const char* pKey, bool value);
//设置指定键的整数值
setIntegerForKey(const char* pKey, int value);
//设置指定键的浮点值
setFloatForKey(const char* pKey, float value);
//设置指定键的双精度值
setDoubleForKey(const char* pKey, double value);
//设置指定键的字符串值
setStringForKey(const char* pKey, const std::string & value);
//立即将XML数据写入文件
//取得单例的指针
static CCUserDefault* sharedUserDefault();
//释放单例
static void purgeSharedUserDefault();
//取得保存后的XML文件路径
const static std::string& getXMLFilePath();
//因为是单例,构造函数私有化
CCUserDefault();
//创建XML文件
static bool createXMLFile();
//XML文件是否存在
static bool isXMLFileExist();
//初始化XML文件
static void initXMLFilePath();
//单例的指针
static CCUserDefault* m_spUserD
//XML文件的路径
static std::string m_sFileP
//XML文件是否已经被初始化
static bool m_sbIsFilePathI
#endif // __SUPPORT_CCUSERDEFAULT_H__
CCUserDefault.cpp:
#include &CCUserDefault.h&
#include &platform/CCCommon.h&
#include &platform/CCFileUtils.h&
#include &libxml/parser.h&
#include &libxml/tree.h&
// XML的根节点名称
#define USERDEFAULT_ROOT_NAME
&userDefaultRoot&
//默认的XML文件名称
#define XML_FILE_NAME &UserDefault.xml&
//使用C++标准库的命名空间
//使用Cocos2d命名空间
NS_CC_BEGIN
//单例的指针
static xmlDocPtr g_sharedDoc = NULL;
//静态全局函数,用于取得一个键的XML结点指针
static xmlNodePtr getXMLNodeForKey(const char* pKey, xmlNodePtr *rootNode)
//定义用于存储返回结果的临时指针变量并置空
xmlNodePtr curNode = NULL;
//键值的有效性判断
if (! pKey)
return NULL;
//取得根结点
*rootNode = xmlDocGetRootElement(g_sharedDoc);
if (NULL == *rootNode)
CCLOG(&read root node error&);
//循环查询相应的键结点
curNode = (*rootNode)-&xmlChildrenN
while (NULL != curNode)
//如果键结点名称与查询键名称一致中断退出循环
if (! xmlStrcmp(curNode-&name, BAD_CAST pKey))
//否则指针指向下一个结点继续循环
curNode = curNode-&
} while (0);
//返回结点指针
return curN
//取得相应的键值
static inline const char* getValueForKey(const char* pKey)
//定义用于存储返回结果的临时字符指针变量并置空
const char* ret = NULL;
//定义结点指针变量取得相应的键结点。
xmlNodePtr rootN
xmlNodePtr node = getXMLNodeForKey(pKey, &rootNode);
// 如果找到了相应的结点,取得结点的内存值转换为字符指针返回。
ret = (const char*)xmlNodeGetContent(node);
//设置相应的键值
static void setValueForKey(const char* pKey, const char* pValue)
xmlNodePtr rootN
// 有效性判断
if (! pKey || ! pValue)
// 取得相应的键结点
node = getXMLNodeForKey(pKey, &rootNode);
// 如果找到,设置结点的值为pValue
xmlNodeSetContent(node, BAD_CAST pValue);
//如果找不到键值,则生成相应的键结点和键值结点并放入根结点下。
if (rootNode)
//先创建键结点。
xmlNodePtr tmpNode = xmlNewNode(NULL, BAD_CAST pKey);
//再创建健值结点。
xmlNodePtr content = xmlNewText(BAD_CAST pValue);
//将键点点放到根结点下。
xmlAddChild(rootNode, tmpNode);
//将键帧结点放到键结点下。
xmlAddChild(tmpNode, content);
//初始化单例指针置空
CCUserDefault* CCUserDefault::m_spUserDefault = 0;
//初始化XML文件路径为空
string CCUserDefault::m_sFilePath = string(&&);
//初始化文件路径是否被初始化的标记值为false
bool CCUserDefault::m_sbIsFilePathInitialized =
CCUserDefault::~CCUserDefault()
//将数据写入文件
//释放相应的XML文件
if (g_sharedDoc)
xmlFreeDoc(g_sharedDoc);
g_sharedDoc = NULL;
//单例指针置空
m_spUserDefault = NULL;
CCUserDefault::CCUserDefault()
//读取相应的XML文件。
g_sharedDoc = xmlReadFile(getXMLFilePath().c_str(), &utf-8&, XML_PARSE_RECOVER);
//释放单例
void CCUserDefault::purgeSharedUserDefault()
CC_SAFE_DELETE(m_spUserDefault);
m_spUserDefault = NULL;
//从指定的键中取得布尔值
bool CCUserDefault::getBoolForKey(const char* pKey)
return getBoolForKey(pKey, false);
//从指定的键中取得布尔值,如果没有则返回默认参数。
bool CCUserDefault::getBoolForKey(const char* pKey, bool defaultValue)
const char* value = getValueForKey(pKey);
bool ret = defaultV
if (value)
ret = (! strcmp(value, &true&));
xmlFree((void*)value);
//从指定的键中取得整数值
int CCUserDefault::getIntegerForKey(const char* pKey)
return getIntegerForKey(pKey, 0);
//从指定的键中取得整数值,如果没有则返回默认参数
int CCUserDefault::getIntegerForKey(const char* pKey, int defaultValue)
const char* value = getValueForKey(pKey);
int ret = defaultV
if (value)
ret = atoi(value);
xmlFree((void*)value);
//从指定的键中取得浮点值
float CCUserDefault::getFloatForKey(const char* pKey)
return getFloatForKey(pKey, 0.0f);
//从指定的键中取得浮点值,如果没有则返回默认参数。
float CCUserDefault::getFloatForKey(const char* pKey, float defaultValue)
float ret = (float)getDoubleForKey(pKey, (double)defaultValue);
//从指定的键中取得双精度值
CCUserDefault::getDoubleForKey(const char* pKey)
return getDoubleForKey(pKey, 0.0);
//从指定的键中取得双精度值,如果没有则返回默认参数。
double CCUserDefault::getDoubleForKey(const char* pKey, double defaultValue)
const char* value = getValueForKey(pKey);
double ret = defaultV
if (value)
ret = atof(value);
xmlFree((void*)value);
//从指定的键中取得字符串值
std::string CCUserDefault::getStringForKey(const char* pKey)
return getStringForKey(pKey, &&);
//从指定的键中取得字符串值,如果没有则返回默认参数
string CCUserDefault::getStringForKey(const char* pKey, const std::string & defaultValue)
const char* value = getValueForKey(pKey);
string ret = defaultV
if (value)
ret = string(value);
xmlFree((void*)value);
//设置指定键的布尔值
void CCUserDefault::setBoolForKey(const char* pKey, bool value)
// save bool value as string
if (true == value)
setStringForKey(pKey, &true&);
setStringForKey(pKey, &false&);
//设置指定键的整数值
void CCUserDefault::setIntegerForKey(const char* pKey, int value)
// check key
if (! pKey)
// format the value
char tmp[50];
memset(tmp, 0, 50);
sprintf(tmp, &%d&, value);
setValueForKey(pKey, tmp);
//设置指定键的浮点值
void CCUserDefault::setFloatForKey(const char* pKey, float value)
setDoubleForKey(pKey, value);
//设置指定键的双精度值
void CCUserDefault::setDoubleForKey(const char* pKey, double value)
// check key
if (! pKey)
// format the value
char tmp[50];
memset(tmp, 0, 50);
sprintf(tmp, &%f&, value);
setValueForKey(pKey, tmp);
//设置指定键的字符串值
void CCUserDefault::setStringForKey(const char* pKey, const std::string & value)
// check key
if (! pKey)
setValueForKey(pKey, value.c_str());
//取得单例
CCUserDefault* CCUserDefault::sharedUserDefault()
//初始化XML文件
initXMLFilePath();
//如果文件不存在则创建,如果创建不成功返回失败。
if ((! isXMLFileExist()) && (! createXMLFile()))
return NULL;
//如果当前单例指针为空,创建单例
if (! m_spUserDefault)
m_spUserDefault = new CCUserDefault();
//返回单例指针
return m_spUserD
//XML文件是否存在。
bool CCUserDefault::isXMLFileExist()
//创建一个文件指针打开相应的文件。
FILE *fp = fopen(m_sFilePath.c_str(), &r&);
bool bRet =
//看是否能打开以判断是否存在。
fclose(fp);
//初始化XML文件路径
void CCUserDefault::initXMLFilePath()
//如果初始化的标记为false,组合出文件字符串。
if (! m_sbIsFilePathInitialized)
//文件路径名为文件系统的写入路径[后面详解]下的“UserDefault.xml”。
m_sFilePath += CCFileUtils::sharedFileUtils()-&getWriteablePath() + XML_FILE_NAME;
m_sbIsFilePathInitialized =
//创建XML文件
bool CCUserDefault::createXMLFile()
bool bRet =
//定义临时的XML文档指针
xmlDocPtr doc = NULL;
//使用do-while框架结构来随时中断
// 创建一个新的1.0版的XML文档
doc = xmlNewDoc(BAD_CAST&1.0&);
if (doc == NULL)
CCLOG(&can not create xml doc&);
// 创建根结点
xmlNodePtr rootNode = xmlNewNode(NULL, BAD_CAST USERDEFAULT_ROOT_NAME);
if (rootNode == NULL)
CCLOG(&can not create root node&);
//设置创建的结点为XML文档中的根结点
xmlDocSetRootElement(doc, rootNode);
//保存XML文件
xmlSaveFile(m_sFilePath.c_str(), doc);
} while (0);
// 释放文档指针
xmlFreeDoc(doc);
//返回成败
//取得XML文件路径
const string& CCUserDefault::getXMLFilePath()
return m_sFileP
//立即将XML数据写入文件
void CCUserDefault::flush()
// 如果文档有效则进行保存文档到文件中。
if (g_sharedDoc)
xmlSaveFile(CCUserDefault::sharedUserDefault()-&getXMLFilePath().c_str(), g_sharedDoc);
& & & & & & &&这引CCUserDefault类写的真是不错。非常简洁好用。但我们要明白“文件系统的写入路径”是什么?
&&&&&&&&&&&&& 在CCFileUtils.cpp中找到相应的函数:
//取得文件写入路径
string CCFileUtils::getWriteablePath()
// 取得当前程序所在目录
char full_path[_MAX_PATH + 1];
::GetModuleFileNameA(NULL, full_path, _MAX_PATH + 1);
// 如果是Release模式
#ifndef _DEBUG
// 取得移除路径的文件名
char *base_name = strrchr(full_path, '\\');
if(base_name)
char app_data_path[_MAX_PATH + 1];
// 取得系统文件夹应用程序数据目录,如C:\Documents and Settings\username\Local Settings\Application Data,可参看: /view/412cfc02f78ae5.html
if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, app_data_path)))
//创建字符串ret存放取出的路径
string ret((char*)app_data_path);
//字符串尾部加上文件名。
ret += base_
// 去除扩展名并加上”\\”
ret = ret.substr(0, ret.rfind(&.&));
ret += &\\&;
// 创建相应的目录
if (SUCCEEDED(SHCreateDirectoryExA(NULL, ret.c_str(), NULL)))
//如果成功返回ret。
#endif // not defined _DEBUG
//创建字符串ret存放当前程序所在目录。
string ret((char*)full_path);
// 截取带”\\”部分的路径。
ret.substr(0, ret.rfind(&\\&) + 1);
//返回ret。
&&&&&&&&&&&&& 这个函数对于DEBUG和RELEASE模式有区别处理,DEBUG模式取出的路径即为当前程序所在目录,RELEASE模式则在系统目录下创建当前程序名称的目录并返回。
&&&&&&&&&&&&& 接下来我们看一下Cocos2d-x在例子中的具体使用,找到TestCpp中的UserDefaultTest。
UserDefaultTest.h:
#ifndef _USERDEFAULT_TEST_H_
#define _USERDEFAULT_TEST_H_
#include &cocos2d.h&
#include &../testBasic.h&
//创建一个层用于处理XML数据
class UserDefaultTest : public CCLayer
UserDefaultTest();
~UserDefaultTest();
void doTest();
//演示用的场景
class UserDefaultTestScene : public TestScene
virtual void runThisTest();
#endif // _USERDEFAULT_TEST_H_
对应的CPP:
// 开启COCOS2D的DEBUG标记
#define COCOS2D_DEBUG 1
#include &UserDefaultTest.h&
#include &stdio.h&
#include &stdlib.h&
//层的构造函数。
UserDefaultTest::UserDefaultTest()
//取得屏幕大小,创建文字标签提示。
CCSize s = CCDirector::sharedDirector()-&getWinSize();
CCLabelTTF* label = CCLabelTTF::create(&CCUserDefault test see log&, &Arial&, 28);
//将标签放到当前层中并置于屏幕中央。
addChild(label, 0);
label-&setPosition( ccp(s.width/2, s.height-50) );
//调用测试函数。
void UserDefaultTest::doTest()
//开始打印日志。
CCLOG(&********************** init value ***********************&);
// 创建CCUserDefault单例并创建相应的数据类型键,设置其键值。
CCUserDefault::sharedUserDefault()-&setStringForKey(&string&, &value1&);
CCUserDefault::sharedUserDefault()-&setIntegerForKey(&integer&, 10);
CCUserDefault::sharedUserDefault()-&setFloatForKey(&float&, 2.3f);
CCUserDefault::sharedUserDefault()-&setDoubleForKey(&double&, 2.4);
CCUserDefault::sharedUserDefault()-&setBoolForKey(&bool&, true);
// 设置完后,打印各类型键取出的值。
string ret = CCUserDefault::sharedUserDefault()-&getStringForKey(&string&);
CCLOG(&string is %s&, ret.c_str());
double d = CCUserDefault::sharedUserDefault()-&getDoubleForKey(&double&);
CCLOG(&double is %f&, d);
int i = CCUserDefault::sharedUserDefault()-&getIntegerForKey(&integer&);
CCLOG(&integer is %d&, i);
float f = CCUserDefault::sharedUserDefault()-&getFloatForKey(&float&);
CCLOG(&float is %f&, f);
bool b = CCUserDefault::sharedUserDefault()-&getBoolForKey(&bool&);
CCLOG(&bool is true&);
CCLOG(&bool is false&);
//CCUserDefault::sharedUserDefault()-&flush();
CCLOG(&********************** after change value ***********************&);
// 改变相应键的键值。
CCUserDefault::sharedUserDefault()-&setStringForKey(&string&, &value2&);
CCUserDefault::sharedUserDefault()-&setIntegerForKey(&integer&, 11);
CCUserDefault::sharedUserDefault()-&setFloatForKey(&float&, 2.5f);
CCUserDefault::sharedUserDefault()-&setDoubleForKey(&double&, 2.6);
CCUserDefault::sharedUserDefault()-&setBoolForKey(&bool&, false);
//将XML数据保存到相应文件中。
CCUserDefault::sharedUserDefault()-&flush();
// 再次打印各键值。
ret = CCUserDefault::sharedUserDefault()-&getStringForKey(&string&);
CCLOG(&string is %s&, ret.c_str());
d = CCUserDefault::sharedUserDefault()-&getDoubleForKey(&double&);
CCLOG(&double is %f&, d);
i = CCUserDefault::sharedUserDefault()-&getIntegerForKey(&integer&);
CCLOG(&integer is %d&, i);
f = CCUserDefault::sharedUserDefault()-&getFloatForKey(&float&);
CCLOG(&float is %f&, f);
b = CCUserDefault::sharedUserDefault()-&getBoolForKey(&bool&);
CCLOG(&bool is true&);
CCLOG(&bool is false&);
UserDefaultTest::~UserDefaultTest()
//场景启动时调用。
void UserDefaultTestScene::runThisTest()
//创建一个演示用的层并放到当前演示场景中。
CCLayer* pLayer = new UserDefaultTest();
addChild(pLayer);
//启动当前场景。
CCDirector::sharedDirector()-&replaceScene(this);
pLayer-&release();
当我们在DEBUG模式下运行此演示后程序截图为:
在程序的运行目录会出现:
& & & & & & &&用IE打开后可以看到相应的键值数据。这样我们便学会了如何存储游戏中用到的数据到XML文件中。下课!
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:735611次
积分:8858
积分:8858
排名:第968名
原创:145篇
评论:716条
&&&&95年第一次使用BASIC在学习机上进行超级玛丽游戏编程至今已经过去了18年,期间自学多门编程语言,创建多个游戏编程爱好者网站,03年起进入游戏公司从事游戏程序员职位至今,担任过2D引擎及工具开发,Linux网络服务器开发,3D引擎及工具开发,项目主程,程序总监,CTO等多岗位。目前在创准备中,看好未来移动平台的发展,希望在Cocos2d-x引擎的底层和周边方面做出一些有用的建设性作用。
红孩儿Cocos2d-x学习园地
QQ群2:(已满)
QQ群1:(已满)配备 512 MS 大容量存储器的全新 PicoScope 3000D 系列 USB 3.0 SuperSpeed 示波器
> 配备 512 MS 大容量存储器的全新 PicoScope 3000D 系列 USB 3.0 SuperSpeed 示波器
配备 512 MS 大容量存储器的全新 PicoScope 3000D 系列 USB 3.0 SuperSpeed 示波器
  PicoScope 3000D 系列是专供主流电子设计工程师使用的高性能的测试和测量仪器。具有高达 200 MHz 的带宽,2 或 4 个模拟通道(混合信号 (MSO) 型号另配有 16 个数字通道),并具有 64 到 512 MS 具有大容量,PicoScope 3000D 系列最适合调试最新的数字和混合信号设计。此提供最高为 1 GS/s 的实时采样率,并具有 USB 3.0 接口和内置的任意波形发生器 (AWG)。紧凑型设计可让此方便用于固定式和便携式用途。本文引用地址:
  &全新 PicoScope 3000D 示波器的大容量意味着您可以对最快的采样速率使用长时基。&总经理 Alan Tong 解释道。&例如, 即使采样速率是 1 GS/s,您也可以捕获 500 ms 波形&即五亿样本&而硬件加速可确保显示器顺利更新。&
  可以对 512 MS 缓冲分段,在每个分段间不足 1 &s 的重新预准备时间内可以获得 50 000 个样本的高达 10 000 个波形分段。在分析波形突发或包含长间隙的串行数据包时,存储器分析非常有用。PicoScope 可以设置成对于每个数据包触发并跳过不感兴趣的间隙。例如,此功能可让用户采集几分钟内的 CAN 数据包,然后在稍后某个时间分析此数据包内容。
  PicoScope 示波器具有多项功能,配备频谱分析仪和任意波形发生器 (AWG),并将许多高级功能作为标配,如总线串行解码、容限测试、数学通道和滤波。先进的触发器,包括脉冲宽度、间隔、窗口、窗口脉冲宽度、窗位压差、窗口压差、矮脉冲、可变迟滞和逻辑。所有触发都是数字式的,确保低抖动、高准确性和单 LSB 电压分辨率。MSO 型号将这些触发器与数字输入中的边缘和图形触发相结合。
  PicoScope 使用主机 PC 来控制仪器和显示波形,因此屏幕大小和分辨率是不受限制的。PC 的大显示屏可以异常清晰地显示获取的波形,并可通过键盘或鼠标控制轻松地缩放和平移波形。其他内置功能包括彩色余晖显示模式、自动测量和统计、可编程报警以及对 I2C、UART/RS232、SPI、CAN 总线、LIN、FlexRay 和 I2S 信号的解码。
  新示波器通过 PicoScope 软件的最新更新获得性能提升。最新的快速余晖模式可以每秒更新约 100 000 个波形,而数学通道已扩展为包含可配置的滤波器。
  免费的软件开发工具包 (SDK) 可以实现对从工业标准应用到编程语言的各种控制。SDK 包括包含用 C#、C++、Excel、LabVIEW 和 MATLAB 编写的示例程序,并且支持 C 调用约定的任何其他语言也可以使用。PicoScope 软件和 SDK 与 Microsoft Windows XP 到 Windows 8 之间的各个版本兼容,并且提供适用于 Linux 和 Mac OS X 的试用版。试用版驱动程序也适用于基于 ARM 的 Beaglebone Black 和 Raspberry Pi。
  PicoScope 3000D 系列示波器现已上市。这些示波器的价位不等 - 2 通道 50 MHz PicoScope 3203D 的售价为 349 英镑,而 4 通道 200 MHz PicoScope 3406D MSO 的售价为 1445 英镑,均包括一套探棒和 5 年保修。
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
at45d系列spi接口flash存储器
下载积分:1000
内容提示:at45d系列spi接口flash存储器
文档格式:DOC|
浏览次数:8|
上传日期: 08:06:42|
文档星级:
该用户还上传了这些文档
at45d系列spi接口flash存储器
官方公共微信}

我要回帖

更多关于 大容量存储控制器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信