精华内容
下载资源
问答
  • 存储库包含我对UOC生物信息学和生物统计学硕士学位的第二次辩论“微阵列数据分析”的答案。
  • 芯片数据预处理 获取差异表达基因 GO和KEGG分析 聚类分析 (本文于2013.09.04更新) 基因芯片技术的特点是使用寡聚核苷酸探针检测基因。前一节使用ReadAffy函数读取CEL文件获得的数据是探针水平的(probe ...

    基因芯片技术的特点是使用寡聚核苷酸探针检测基因。前一节使用ReadAffy函数读取CEL文件获得的数据是探针水平的(probe level),即杂交信号,而芯片数据预处理的目的是将杂交信号转成表达数据(即表达水平数据,expression level data)。存储探针水平数据的是AffyBatch类对象,而表达水平数据为ExpressionSet类对象。基因芯片探针水平数据处理的R软件包有affy, affyPLM, affycomp, gcrma等,这些软件包都很有用。如果没有安装可以通过运行下面R语句安装:

    library(BiocInstaller)
    biocLite(c("affy","gcrma", "affyPLM", "affycomp"))
    

    Affy芯片数据的预处理一般有三个步骤:

    • 背景处理(background adjustment)
    • 归一化处理(normalization,或称为“标准化处理”)
    • 汇总(summarization)。

    最后一步获取表达水平数据。需要说明的是,每个步骤都有很多不同的处理方法(算法),选择不同的处理方法对最终结果有非常大的影响。选择哪种方法是仁者见仁智者见智,不同档次的杂志或编辑可能有不同的偏好。

    1 需要了解的一点Affy芯片基础知识

    Affy基因芯片的探针长度为25个碱基,每个mRNA用11~20个探针去检测,检测同一个mRNA的一组探针称为probe sets。由于探针长度较短,为保证杂交的特异性,affy公司为每个基因设计了两类探针,一类探针的序列与基因完全匹配,称为perfect match(PM)probes,另一类为不匹配的探针,称为mismatch (MM)probes。PM和MM探针序列除第13个碱基外完全一样,在MM中把PM的第13个碱基换成了互补碱基。PM和MM探针成对出现。

    我们先使用前一节的方法载入数据并修改芯片名称:

    library(affy)
    library(tcltk)
    filters <- matrix(c("CEL file", ".[Cc][Ee][Ll]", "All", ".*"), ncol = 2, byrow = T)
    cel.files <- tk_choose.files(caption = "Select CELs", multi = TRUE,
                                 filters = filters, index = 1)
    # 最好查看一下文件名称
    basename(cel.files)
    
    ## [1] "NRID9780_Zarka_2-1_MT-0HCA(SOIL)_Rep1_ATH1.CEL" 
    ## [2] "NRID9781_Zarka_2-2_MT-0HCB(SOIL)_Rep2_ATH1.CEL" 
    ## [3] "NRID9782_Zarka_2-3_MT-1HCA(SOIL)_Rep1_ATH1.CEL" 
    ## [4] "NRID9783_Zarka_2-4_MT-1HCB(SOIL)_Rep2_ATH1.CEL" 
    ## [5] "NRID9784_Zarka_2-5_MT-24HCA(SOIL)_Rep1_ATH1.CEL"
    ## [6] "NRID9785_Zarka_2-6_MT-24HCB(SOIL)_Rep2_ATH1.CEL"
    ## [7] "NRID9786_Zarka_2-7_MT-7DCA(SOIL)_Rep1_ATH1.CEL" 
    ## [8] "NRID9787_Zarka_2-8_MT-7DCB(SOIL)_Rep2_ATH1.CEL"
    
    data.raw <- ReadAffy(filenames = cel.files)
    sampleNames(data.raw) <- paste("CHIP",1:length(cel.files),sep="")
    

    用pm和mm函数可查看每个探针的检测情况:

    pm.data.raw <- pm(data.raw)
    head(pm.data.raw, 2)
    
    ##        CHIP1 CHIP2 CHIP3 CHIP4 CHIP5 CHIP6 CHIP7 CHIP8
    ## 501131 127.0 166.3   112 139.8 111.3  85.5 126.3 102.8
    ## 251604 118.5 105.0    82 101.5  94.0  81.3 103.8 103.0
    
    mm.data.raw <- mm(data.raw)
    head(mm.data.raw, 2)
    
    ##        CHIP1 CHIP2 CHIP3 CHIP4 CHIP5 CHIP6 CHIP7 CHIP8
    ## 501843  89.0  88.0  80.5  91.0  77.0    75  79.0  72.0
    ## 252316 134.3  77.3  77.0 107.8  98.5    75  99.5  71.3
    

    上面显示的列名称就是探针的名称。而基因名称用probeset名称表示:

    head(geneNames(data.raw))
    
    ## [1] "244901_at" "244902_at" "244903_at" "244904_at" "244905_at" "244906_at"
    

    probeset不一定和实际基因一一对应,这些后面对探针进行基因名称映射时会看到。

    2 背景处理(background adjustment)

    虽然说是背景处理,但是这一步既处理背景值,又处理噪声信号。注意背景和噪声是两个概念,比如说乡间夜晚的蛙叫声虽嘈杂但很稳定,算是背景,如果突然来一声狗叫,那就是噪声。这两者在统计上可以区分。

    芯片的背景处理理论上很简单,因为Affy公司设计MM的目的就是检测非特异杂交信号,PM -MM 不就结了?但是研究发现居然有多达30%的MM探针获得的信号强度比相应PM探针的还强(嘿嘿),所以啊,研究者的饭碗就出来了,整些看起来还合理的方法吧。

    R软件包affy用于芯片背景噪声消减的函数是bg.correct(),而MAS和RMA方法是最常用的两种方法。

    MAS方法将芯片分为k(默认值为16)个网格区域,用每个区域使用信号强度最低的2%探针去计算背景值和噪声。RMA方法的原理比较复杂,可以参看文献:

    R. A. Irizarry, B. Hobbs, F. Collin, et al. Exploration, normalization, and summaries of high density oligonucleotide array probe level data. Biostatistics, 4:249–64, 2003b. 11, 18, 27, 232, 241, 432, 443。

    data.rma <- bg.correct(data.raw, method="rma")
    data.mas <- bg.correct(data.raw, method="mas")
    class(data.rma)
    
    ## [1] "AffyBatch"
    ## attr(,"package")
    ## [1] "affy"
    
    class(data.mas)
    
    ## [1] "AffyBatch"
    ## attr(,"package")
    ## [1] "affy"
    
    class(data.raw)
    
    ## [1] "AffyBatch"
    ## attr(,"package")
    ## [1] "affy"
    

    可以看到:ReadAffy()读入的CEL芯片数据以AffyBatch类数据形式存储,而背景消减后得到的依然是AffyBatch类数据。

    MAS方法应用后PM和MM的信号强度都被重新计算。RMA方法仅使用PM探针数据,背景调整后MM的信号值不变。

    head(pm(data.raw)-pm(data.mas),2)
    
    ##        CHIP1 CHIP2 CHIP3 CHIP4 CHIP5 CHIP6 CHIP7 CHIP8
    ## 501131 79.34 62.93 63.23 72.87 62.48 64.43 62.97 60.86
    ## 251604 77.57 63.06 63.73 80.69 63.07 66.53 63.33 60.34
    
    head(pm(data.raw)-pm(data.rma),2)
    
    ##        CHIP1  CHIP2 CHIP3  CHIP4 CHIP5 CHIP6  CHIP7 CHIP8
    ## 501131 111.2 102.21 93.23 116.36 93.75 76.15 102.82 85.21
    ## 251604 103.9  88.69 72.57  90.75 82.23 72.64  87.75 85.32
    
    head(mm(data.raw)-mm(data.mas),2)
    
    ##        CHIP1 CHIP2 CHIP3 CHIP4 CHIP5 CHIP6 CHIP7 CHIP8
    ## 501843 79.34 62.93 63.24 72.90 62.48 64.44 62.97 60.85
    ## 252316 77.56 63.06 63.73 80.66 63.07 66.51 63.33 60.34
    
    #差值为全部为0,说明rma方法没有对mm数值进行处理
    head(mm(data.raw)-mm(data.rma),2)
    
    ##        CHIP1 CHIP2 CHIP3 CHIP4 CHIP5 CHIP6 CHIP7 CHIP8
    ## 501843     0     0     0     0     0     0     0     0
    ## 252316     0     0     0     0     0     0     0     0
    
    identical(mm(data.raw), mm(data.rma))
    
    ## [1] TRUE
    

    3 归一化处理(normalization)

    同一个RNA样品用相同类型的几块芯片进行杂交,获得的结果(信号强度等)都不可能完全相同,甚至差别很大。为了使不同芯片获得的结果具有可比性,必需进行归一化处理。这一步的方法也很多。归一化处理的affy函数为normalize(),以Affybatch对象和处理方法为参数。

    3.1 线性缩放方法

    这是Affy公司在其软件(4.0和5.0版本)中使用的方法。这种方法先选择一个芯片作为参考,将其他芯片和参考芯片逐一做线性回归分析,用回归直线(没有截距)对其他芯片的信号值做缩放。Affy公司的软件做回归分析前去除了2%最强和最弱信号。使用很简单,mas方法做背景消减后做归一化分析的R语句是:

    data.mas.ln <- normalize(data.mas, method = "constant")
    head(pm(data.mas.ln)/pm(data.mas), 5)
    
    ##        CHIP1  CHIP2 CHIP3 CHIP4  CHIP5 CHIP6  CHIP7  CHIP8
    ## 501131     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    ## 251604     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    ## 261891     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    ## 230387     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    ## 217334     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    
    head(mm(data.mas.ln)/mm(data.mas), 5)
    
    ##        CHIP1  CHIP2 CHIP3 CHIP4  CHIP5 CHIP6  CHIP7  CHIP8
    ## 501843     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    ## 252316     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    ## 262603     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    ## 231099     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    ## 218046     1 0.8788 1.002 1.141 0.9929 1.029 0.7578 0.8834
    

    可以看出,线性缩放方法以第一块芯片为参考,它的数值没有被处理,而其他芯片都被缩放了。对同一块芯片,不同探针的缩放倍数是一个常数。PM和MM的缩放方法完全一样。

    3.2 非线性缩放方法

    此方法获得的结果比线性方法要好,做非线性拟合时不是取整张芯片而仅取部分(一列)作为基线。

    data.mas.nl <- normalize(data.mas, method = "invariantset")
    head(pm(data.mas.nl)/pm(data.mas), 5)
    
    ##        CHIP1 CHIP2 CHIP3 CHIP4 CHIP5 CHIP6  CHIP7  CHIP8
    ## 501131     1 1.050 1.417 1.359 1.399 2.023 1.0086 1.3124
    ## 251604     1 1.348 2.279 1.838 1.587 2.431 1.1126 1.3059
    ## 261891     1 1.564 1.397 1.675 1.497 1.556 1.3167 1.5509
    ## 230387     1 1.259 1.683 1.390 1.360 1.504 1.0145 1.2239
    ## 217334     1 1.009 1.127 1.241 1.229 1.263 0.8417 0.9934
    

    可以看到,同一芯片不同探针的信号值的缩放倍数是不一样的。

    3.3 分位数(quantile)方法

    这种方法认为(或假设)每张芯片探针信号的经验分布函数应完全一样,使用任两张芯片的数据做QQ图应该得到一条斜率为1截距为0的直线。

    data.mas.qt <- normalize(data.mas, method = "quantiles")
    head(pm(data.mas.qt)/pm(data.mas), 5)
    
    ##         CHIP1  CHIP2 CHIP3 CHIP4 CHIP5 CHIP6  CHIP7  CHIP8
    ## 501131 0.7176 0.9602 1.140 1.181 1.112 1.187 0.8145 1.0156
    ## 251604 0.6984 0.9814 1.199 1.209 1.112 1.172 0.8287 1.0143
    ## 261891 0.6939 0.9956 1.137 1.205 1.111 1.186 0.8389 1.0579
    ## 230387 0.7653 0.9777 1.171 1.183 1.115 1.185 0.8153 0.9921
    ## 217334 0.9508 0.9547 1.063 1.162 1.130 1.173 0.7945 0.9266
    

    3.4 其他

    如循环局部加权回归法(Cyclic loess)和 Contrasts方法。

    data.rma.lo <- normalize(data.rma, method = "loess")
    
    ## Done with 1 vs 2 in iteration 1 
    ## Done with 1 vs 3 in iteration 1 
    ## Done with 1 vs 4 in iteration 1 
    ## Done with 1 vs 5 in iteration 1 
    ## Done with 1 vs 6 in iteration 1 
    ## Done with 1 vs 7 in iteration 1 
    ## Done with 1 vs 8 in iteration 1 
    ## Done with 2 vs 3 in iteration 1 
    ## Done with 2 vs 4 in iteration 1 
    ## Done with 2 vs 5 in iteration 1 
    ## Done with 2 vs 6 in iteration 1 
    ## Done with 2 vs 7 in iteration 1 
    ## Done with 2 vs 8 in iteration 1 
    ## Done with 3 vs 4 in iteration 1 
    ## Done with 3 vs 5 in iteration 1 
    ## Done with 3 vs 6 in iteration 1 
    ## Done with 3 vs 7 in iteration 1 
    ## Done with 3 vs 8 in iteration 1 
    ## Done with 4 vs 5 in iteration 1 
    ## Done with 4 vs 6 in iteration 1 
    ## Done with 4 vs 7 in iteration 1 
    ## Done with 4 vs 8 in iteration 1 
    ## Done with 5 vs 6 in iteration 1 
    ## Done with 5 vs 7 in iteration 1 
    ## Done with 5 vs 8 in iteration 1 
    ## Done with 6 vs 7 in iteration 1 
    ## Done with 6 vs 8 in iteration 1 
    ## Done with 7 vs 8 in iteration 1 
    ## 1 0.05487
    
    data.rma.ct <- normalize(data.rma, method = "contrasts")
    
    ## Data size 502156 x 8 Desired subset size 5000 +- 50 
    ## Comuting ranks of old subset....Size of new subset:  109873 
    ## Comuting ranks of old subset....Size of new subset:  64185 
    ## Comuting ranks of old subset....Size of new subset:  27795 
    ## Comuting ranks of old subset....Size of new subset:  14886 
    ## Comuting ranks of old subset....Size of new subset:  12234 
    ## Comuting ranks of old subset....Size of new subset:  7835 
    ## Comuting ranks of old subset....Size of new subset:  7001 
    ## Comuting ranks of old subset....Size of new subset:  5289 
    ## Comuting ranks of old subset....Size of new subset:  5230 
    ## Comuting ranks of old subset....Size of new subset:  5164 
    ## Comuting ranks of old subset....Size of new subset:  5124 
    ## Comuting ranks of old subset....Size of new subset:  5065 
    ## Comuting ranks of old subset....Size of new subset:  5041 
    ## Fitting normalizing curve
    ## Normalizing chip  1 
    ## Normalizing chip  2 
    ## Normalizing chip  3 
    ## Normalizing chip  4 
    ## Normalizing chip  5 
    ## Normalizing chip  6 
    ## Normalizing chip  7 
    ## Normalizing chip  8
    

    4 汇总(Summarization):

    最后一步汇总是使用合适的统计方法通过probeset(包含多个探针)的杂交信号计算出计算表达量。affy包的函数为computeExprSet。需要注意的是computeExprSet函数除需要指定统计方法外还需要指定PM校正的方式:computeExprSet(x, pmcorrect.method, summary.method, …)

    两个参数可以设定的值可以通过下面函数获得:

    pmcorrect.methods()
    
    ## [1] "mas"        "methods"    "pmonly"     "subtractmm"
    
    generateExprSet.methods()
    
    ## [1] "avgdiff"      "liwong"       "mas"          "medianpolish"
    ## [5] "playerout"
    

    常用的汇总方法是medianpolish, liwong和mas。liwong方法仅使用PM做背景校正(pmcorrect.method="pmonly")。例如:

    eset.rma.liwong <- computeExprSet(data.rma.lo, pmcorrect.method="pmonly",
                                      summary.method="liwong")
    
    ## 22810 ids to be processed
    ## |                    |
    ## |####################|
    

    计算过程需要一定的时间,耐心等候完成。最后的结果 ExpressionSet 类型数据:

    class(eset.rma.liwong)
    
    ## [1] "ExpressionSet"
    ## attr(,"package")
    ## [1] "Biobase"
    
    class(data.raw)
    
    ## [1] "AffyBatch"
    ## attr(,"package")
    ## [1] "affy"
    

    5 三合一处理和“自动化”函数:

    了解芯片预处理的原理和步骤后你完全可以用一个R函数完成三步处理。affy包提供的三合一处理函数为 expresso(),用法为:

    # NOT RUN. 函数说明,不可运行。
    expresso(
            afbatch,
            bg.correct = TRUE,
            bgcorrect.method = NULL,
            bgcorrect.param = list(),
            normalize = TRUE,
            normalize.method = NULL,
            normalize.param = list(),
            pmcorrect.method = NULL,
            pmcorrect.param = list(),
            summary.method = NULL,
            summary.param = list(),
            summary.subset = NULL,
            verbose = TRUE,
            widget = FALSE)
    

    例如:

    # NOT RUN:
    eset.mas <- expresso(data.raw, bgcorrect.method="mas", normalize.method="constant",
                         pmcorrect.method="mas", summary.method="mas")
    

    使用的各类方法可用bgcorrect.methods,pmcorrect.methods 和 express.summary.stat.methods函数了解。

    expresso速度较慢,一些R软件包提供速度较快的预编译三合一函数,如affyPLM软件包的threestep函数。affyPLM提供的处理方法很丰富,有兴趣可以自学。

    下面介绍介3个“自动化”函数,这些函数已经预定义了预处理各步骤所采用的方法和参数,不再需要设定。

    5.1 mas5函数

    由affy包提供:

    eset.mas5 <- mas5(data.raw)
    
    ## background correction: mas 
    ## PM/MM correction : mas 
    ## expression values: mas 
    ## background correcting...done.
    ## 22810 ids to be processed
    ## |                    |
    ## |####################|
    

    mas5据说是expresso函数和mas方法的封装。但使用下面语句获得的结果似乎与 mas5(data.raw)的结果不一样(自己去验证看看):

    # NOT RUN:
    expresso(data.raw, bgcorrect.method="mas", normalize=FALSE,
             pmcorrect.method="mas", summary.method="mas")
    

    5.2 rma函数

    也是由affy包提供,其背景处理方法为rma法,归一化处理使用分位数法,而汇总方法使用medianpolish:

    eset.rma <- rma(data.raw)
    
    ## Background correcting
    ## Normalizing
    ## Calculating Expression
    

    它等价于:

    # NOT RUN:
    eset.rma <- expresso(data.raw, bgcorrect.method="rma", normalize.method="quantiles",
                         pmcorrect.method="pmonly", summary.method="medianpolish")
    

    但rma函数是预编译好的C语言函数,速度非常快!

    5.3 gcrma函数

    由gcrma包提供。Affy的软件(比如mas方法)使用MM数据做背景处理,但由于MM出现的问题(上面提到过),这些方法可能高估了背景值。而rma方法在做背景处理时没有使用MM数据,这可能又低估了背景值。MM序列公布后有人对其特异性进行了评估,并使用这些评估结果建立了新方法。gcrma就是这样的方法,也是封装好的三合一方法。

    library(gcrma)
    eset.gcrma <- gcrma(data.raw)
    
    ## Adjusting for optical effect........Done.
    ## Computing affinities.Done.
    ## Adjusting for non-specific binding........Done.
    ## Normalizing
    ## Calculating Expression
    

    6 芯片处理方法的优劣评估

    芯片预处理的方法这么多,哪个好?我选哪个?知道得越多越迷惑。幸好这些已经有人做了,牛人Rafael Irizarry 和 Leslie Cope专门写了一个R软件包affycomp用于方法评估。

    评估方法的优劣必需有数据,而且是包含已知因素的数据。affycomp需要两个系列的数据,一个是RNA稀释系列芯片数据,称为Dilution data,另一个是使用了内参/外标RNA的芯片,称为Spike-in data。Spike-in RNA是在目标物种中不存在、但在芯片上含有相应检测探针的RNA,比如Affy的拟南芥芯片上有几个人或细菌的基因检测探针。由于稀释倍数已知,内参/外标的RNA量和杂交特异性也已知,所以结果可以预测,也就可以用做方法评估。对于严格的芯片实验来说,这些实验都是必须的。但是绝大多数人不做,因为成本很高,尤其是只做几张芯片的时候,一般直接使用别人认可的方法如RMA或MAS。

    7 Session Info

    sessionInfo()
    
    ## R version 3.1.0 (2014-04-10)
    ## Platform: x86_64-pc-linux-gnu (64-bit)
    ## 
    ## locale:
    ##  [1] LC_CTYPE=zh_CN.UTF-8       LC_NUMERIC=C              
    ##  [3] LC_TIME=zh_CN.UTF-8        LC_COLLATE=zh_CN.UTF-8    
    ##  [5] LC_MONETARY=zh_CN.UTF-8    LC_MESSAGES=zh_CN.UTF-8   
    ##  [7] LC_PAPER=zh_CN.UTF-8       LC_NAME=C                 
    ##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
    ## [11] LC_MEASUREMENT=zh_CN.UTF-8 LC_IDENTIFICATION=C       
    ## 
    ## attached base packages:
    ## [1] parallel  tcltk     stats     graphics  grDevices utils     datasets 
    ## [8] methods   base     
    ## 
    ## other attached packages:
    ##  [1] ath1121501probe_2.14.0 AnnotationDbi_1.27.3   GenomeInfoDb_1.1.2    
    ##  [4] gcrma_2.37.0           ath1121501cdf_2.14.0   affy_1.43.0           
    ##  [7] Biobase_2.25.0         BiocGenerics_0.11.0    zblog_0.1.0           
    ## [10] knitr_1.5             
    ## 
    ## loaded via a namespace (and not attached):
    ##  [1] affyio_1.33.0         BiocInstaller_1.15.2  Biostrings_2.33.3    
    ##  [4] DBI_0.2-7             evaluate_0.5.3        formatR_0.10         
    ##  [7] highr_0.3             IRanges_1.99.2        preprocessCore_1.27.0
    ## [10] RSQLite_0.11.4        S4Vectors_0.0.2       splines_3.1.0        
    ## [13] stats4_3.1.0          stringr_0.6.2         tools_3.1.0          
    ## [16] XVector_0.5.3         zlibbioc_1.11.1
    

    展开全文
  • 存储芯片分析 DataFlash是大容量串行Flash存储器产品,采用NOR技术制造,写慢读快,可用于存储数据或程序代码,其产品型号为GD25Q127C。 此存储器容量为128M-b,16384K-byte;采用SPI接口进行读写,支持SPI总线模式0...

    Flash文件系统方案

    存储芯片分析

    DataFlash是大容量串行Flash存储器产品,采用NOR技术制造,写慢读快,可用于存储数据或程序代码,其产品型号为GD25Q127C。

    此存储器容量为128M-b,16384K-byte;采用SPI接口进行读写,支持SPI总线模式0和3。输入数据在SCLK上升沿锁存,下降沿改变数据。128Mb容量的页面尺寸为256字节。

    ​ Endurance: 100,000 program/erase cycles per page minimum

    FLASH磨损均衡原理及实现

    什么是磨损均衡(wear leveling)?

    闪存芯片磨损。每次擦除和写入闪存的一部分时,都会对其造成轻微损坏。嵌入式Flash文件系统注意到了这种危险,有时会尝试分散损坏而不是将损坏集中在一个区域中,从而延长了内存的寿命和设备的寿命。

    文件系统对比

    文件系统(官方链接) 简介 企业商用 掉电安全 Flash均衡磨损 代码大小 动态内存 更新日期 备注
    FatFs R0.14a FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。支持FAT12、FAT16 和FAT32。 6.4k-13.1kbytes 4*分区+2 2021年2月14日 不支持flash均衡
    DIY 手写代码实现 ** ** ** 针对特定需求,通用性差。
    littlefs V2.4 LittleFS是ARM工程师开发,社区活跃 是(LittleFS在设计时就保证了掉电安全的问题,因此不需要每次掉电后执行修复工作) 24kbytes 3856 B 2021年1月20日 首选
    spiffs V0.3.7 一个用于嵌入式设备上的SPI NOR flash设备的文件系统 是(SPIFFS掉电后需要调用SPIFFS_check()进行修复,否则无法保证文件系统一致性) 36.94kbytes 3790 B(没有堆) 2017年7月17日 上游开发人员不再积极支持SPIFFS。 支持256 byte页面
    Yaffs2 专门为NAND Flash芯片提供了一个强大的日志文件系统,Yaffs当前是版本2。Yaffs2支持2K字节的页面闪存以及512字节的页面闪存。(Yaffs1仅支持原始的512字节页面闪存,并且现在处于维护模式。) ** ** ** 不支持256字节页面
    JFFS2 JFFS2是RedHat公司基于JFFS开发的闪存文件系统,从2.4.10版本开始,JFFS2已包含在正式的Linux内核中。 ** ** ** 挂载时间慢

    参考:

    1. RTOS文件系统对比:LittleFS Vs. SPIFFS
    2. SPIFFS是什么
    3. Yaffs(Yaffs2)和JFFS2之间的比较
    4. SD卡中FAT32文件格式快速入门(图文详细介绍)
    5. SPIFFS弃用警告
    6. LittleFS Explorer

    LittleFS-高完整性嵌入式文件系统

    LittleFS文件系统特性:

    • 断电恢复能力-它需要强有力的保证,以确保文件系统保持一致,并将数据刷新到基础存储。
    • 损耗均衡-通常,存储支持每个块有限数量的擦除操作,因此,使用整个存储设备对于可靠性至关重要。
    • 微小的占用空间-IoT设备受ROM和RAM限制。占地面积小节省金钱。

    数据格式

    工作历史信息记录

    每1分钟,覆盖最后500小时(30000分钟)。

    保存为\history\x.asc,x = 210413173800_0(年月日时分秒)

    表1b 单位分钟 工作历史信息单元数据格式

    字节序号 数据格式及范围 数据内容 说明
    1 00~99(BCD码) 时间-年 表示范围2000年1月1日0时0分0秒到2099年12月31日23时59分59秒
    2 01~12(BCD码) 时间-月
    3 01~31(BCD码) 时间-日
    4 00~23(BCD码) 时间-时
    5 00~59(BCD码) 时间-分
    6 00~59(BCD码) 时间-秒
    7 00~100 SOC 1%分辨率
    8 00~100 SOH 1%分辨率
    9~10 0x00~0xFFFF Battery voltage 100 mV resolution
    11~12 0x00~0xFFFF Battery current 100 mA resolution
    13~14 0x00~0xFFFF Cells voltage maxV 10 mV resolution
    15~16 0x00~0xFFFF Cells voltage minV 10 mV resolution
    17~18 0x00~0xFFFF Cells temperature maxT 0.1 C° resolution
    19~20 0x00~0xFFFF Cells temperature minT 0.1 C° resolution
    21~23 0x00~0xFFFFFF 累计放电能量
    24~26 0x00~0xFFFFFF 累计充电能量 只统计充电,不包括回馈
    27~29 0x00~0xFFFFFF Cumulated exchanged energy between two last sampling : signed 100 mWh resolution
    30~31 0x00~0xFFFF CRC校验码

    故障和错误信息记录

    对于每一个报警、故障或警告事件,触发时刻之后5分钟信息记录(300秒):

    保存为\event\x.asc,x = 210413173800(年月日时分秒 - 触发时刻)

    表2b 单位秒 事件触发单元数据块格式

    字节序号 数据范围及格式 数据内容 说明
    1~3 DBC码 事件时间:时,分,秒
    4~5 0x00~0xFFFF 事件时间之后第0ms电池电压 100 mV resolution
    6~7 0x00~0xFFFF 事件时间之后第0ms电池电流 100 mA resolution
    8~71 0x00~0xFFFF 事件时间之后第0ms,1`32号单体电压 10 mV resolution
    616~617 0x00~0xFFFF 事件时间之后第900ms电池电压 100 mV resolution
    618~619 0x00~0xFFFF 事件时间之后第900ms电池电流 100 mA resolution
    620~683 0x00~0xFFFF 事件时间之后第900ms,1`32号单体电压 10 mV resolution
    684 0x00~0xFF SOC
    685~716 0x00~0xFFFF 0~16号 单体温度 0.1 C° resolution
    717~718 0x00~0xFFFF 功率连接器温度 0.1 C° resolution
    719~720 0x00~0xFFFF 其他传感器温度 0.1 C° resolution
    721~730 10BYTE CAN messages 1 +ID
    731~732 2BYTE CAN messages 1 事件时间之后第xx ms
    733~742 10BYTE CAN messages 2 +ID
    743~744 2BYTE CAN messages 2 事件时间之后第xx ms
    757~766 10BYTE CAN messages 4 +ID
    767~768 2BYTE CAN messages 4 事件时间之后第xx ms
    769~770 2BYTE CRC 校验码
    展开全文
  • 简介1. 认识数据存储芯片HM62256、IP核、LPM开发流程和平台实操:C级任务(80%)实操:B级任务(90%)实操:A级任务(100%)2. IIC串行总线时序分析实操:S级任务(110%)3. 提交数字系统实验——硬件语言描述训练3...

    代码链接:pan.baidu.com/s/1JUZ_bwErDEXyXpPPo8H5FA
    提取码:82i5

    任务书(18级在家实验,可能不同)

    0.简介

    理解IP核和LPM库开发流程、数据存储HM62256、RAM和FIFO的IP核、分层次编写VHDL完成FPGA片内外数据存储验证。
    分层次编写VHDL完成FPGA片内外数据存储,验证平台,IIC总线读写与非易失存储(可选)。

    1. 认识数据存储芯片HM62256、IP核、LPM开发流程和平台

    时间:
    1至2周
    步骤:
    阅读课程平台上“VHDL语言描述训练3”,掌握LPM开发流程。
    阅读理解手册HM62256.PDF中的概述、引脚定义、框图、功能表、读写操作与参数表。
    课程平台上下载资料。

    实操:C级任务(80%)

    1. 设计HM62256测试电路并对其仿真验证。
      ① 认真阅读HM62256的数据手册。
      ② 新建Proteus工程,添加器件HM62256、开关、电阻、LED_YELLOW、电源、地线、三态门74HCT244,并设计好HM62256的功能验证电路。
      ③ 参考电路如下图1
      ④ 仿真验证实现HM62256的读写功能,记录操作步骤和实验结果。
      ⑤ 测试电路设计要求:地址线4位、数据线8位,数据输出部分的总线设计。

    2. 阅读教材P205“参数化只读存储器”,依据上述HM62256的功能,定制开发一个1-port RAM的IP核。
      ① 分析并说明生成目录下的html波形报告
      ② 仿真验证其读写功能,记录波形图并说明。

    在这里插入图片描述
    图1 HM62256的功能测试参考电路

    实操:B级任务(90%)

    定制异步FIFO,参数如下图所示:
    在这里插入图片描述
    要求:
    ① 定制时选择芯片cycloneII系列。
    ② 分析并说明生成目录下的html波形报告。
    ③ 通过新建Quartus工程(芯片EP2C5T144C8)和VWF波形输入完成仿真验证功能。
    注意:输入数据D【15…0】取低4位D【3…0】即可,D【15 …4】输入全为0,不然编译报错,芯片管脚不够。

    实操:A级任务(100%)

    在B级任务的基础上,VHDL编程设计专门状态机与2片异步FIFO来实现乒乓操作。
    要求:仿真时设置写时钟频率为40MHz(25ns),读时钟频率为10MHz(100ns)。
    乒乓操作是1种常常用于数据流控制的处理技巧,通过乒乓操作可以实现低速模块处理高速数据。数据缓冲模块可以是任何存储模块,这里使用的是FIFO。但是利用2个深度短FIFO相互切换,需要设计复杂的切换控制电路来保证数据不丢失。
    操作过程,仅供参考,如下:
    首先对第一个FIFO进行写操作,当第一个FIFO写满之后,切换到第二个FIFO进行写操作,同时对第一个FIFO进行读操作;在第二个FIFO写满之前,第一个FIFO早已读取完毕,此时再次对第一个FIFO进行写操作,同时对第二个FIFO进行读操作,两个FIFO按照一定节拍在读写之间转换,周而复始。

    2. IIC串行总线时序分析

    时间:
    1周

    实操:S级任务(110%)

    借助proteus里的AT24C02C、示波器、IIC终端, 设计单片机(已提供HEX)主机电路发送单字节数据到24C02C的电路,并分析 IIC一帧完整波形。
    步骤:
    ① 阅读AT24C0X手册功能说明,理解如图A所示IIC总线读取任意地址数据的时序。
    在这里插入图片描述
    在这里插入图片描述
    ② 图B中是利用proteus仿真51单片机读取非易失存储器24C02C的电路图,将所提供hex文件装入单片机中,启动仿真,掌握读写操作。

    在这里插入图片描述
    ③ 参考IIC debugger中的数据如图C所示,抓取此时示波器中对应波形,逐条记录说明执行操作的过程。
    ④ 参考图D中的时序,以100KHz为时钟频率,VHDL设计一个基于IIC总线的读取非易失存储器24C02C任意地址数据的接口电路,以ep2c5t144c8为平台设计电路并完成仿真验证。
    在这里插入图片描述
    在这里插入图片描述

    3. 提交

    本次任务作业报告请于5月17日晚23:59分提交(PDF文件),文档正文不超过3页,大小不超过5MB,工程文件不超过5MB,要求如下:
    在这里插入图片描述
    在这里插入图片描述

    数字系统实验——硬件语言描述训练3

    实验日期:2020.5.4-2020.5.17
    实验目标:理解IP核和LPM库开发流程、数据存储HM62256、RAM和FIFO的IP核、分层次编写VHDL完成FPGA片内外数据存储验证。

    一、C级任务

    1、 设计HM62256测试电路并对其仿真验证

    1) 详细阅读HM62256资料,了解74HCT244的功能;
    2) 根据参考图设计电路并将缺失的4位数据输入输出显示电路补充完整,电路图:
    在这里插入图片描述
    步骤:新建Proteus工程,添加器件HM62256、开关、电阻、LED_YELLOW、电源、地线、三态门74HCT244,并设计好HM62256的功能验证电路,连接好连线;
    3) 仿真验证实现HM62256的读写功能

    验证步骤如下:
    ①首先将控制地址开关打到3(可变),将控制输入数据的开关打到01010101(可变),闭合控制四个74HCT244使能OE的开关,将62256的状态置为等待状态(OE、WE均无效);
    ②开始运行,将62256的WE置为有效状态(此时写入62256),接着将WE置为无效,再将74HCT244的OE信号置为无效状态后使62256的OE信号有效(此时从62256的3地址处读处刚存入的数据);
    ③此时可以看到LED显示01010101的信号:
    在这里插入图片描述
    结果正确;

    4) 实验结果分析
    数据经过74HCT244写入62256的3地址内,接着关闭74HCT244,将62256内的数据读出并经另外的74HCT244用LED显示,显示结果正确,整个过程运行正确。

    2、 依据上述HM62256的功能,定制开发一个1-port RAM的IP核

    在这里插入图片描述
    1) html文件波形分析(波形图):
    在这里插入图片描述
    在这里插入图片描述
    图一仅显示了读操作,将memory文件的前三个地址的值读出;
    图二显示了写操作,主要是上升沿处地址1从F1写为00,地址2从F2写为02,
    2) 波形仿真:(mif文件中3、4位置初始为10、15)
    在这里插入图片描述
    150ns:上升沿读出3地址处的数据10;
    100-200ns:we有效,150ns上升沿写入03到地址3处,之后250ns上升沿读出03;
    300-500ns:对4地址进行同样的操作,450ns读入04,550ns上升沿读出04;
    650-850ns:读出3地址处的数据03;
    850-1000ns:读出4地址处的数据04;
    读写验证正确;

    二、B级任务

    按照要求定制异步FIFO;异步FIFO读写时钟不同;宽16位,输出宽64位,深度512字;
    输入低4位,高12位全固定为0;
    在这里插入图片描述

    1、 html文件波形分析(html波形图)

    在这里插入图片描述
    在这里插入图片描述
    两图为正常读写FIFO的波形,和FIFO达到满状态的读写波形;
    首先分析正常读写的波形:在前6个上升沿,wrreg为有效状态,读入6个周期的data(0001->0006)到FIFO中(这6个信号最后才输出),接着在第10个上升沿,rd信号为有效,先入先出的输出输入的六个数据(0006->0001);
    对于rdempty波形,我的理解是在读时非空rdempty置低位,读出数据;
    而对于满状态wrfull读写波形:第四个上升沿,数据被写入FIFO直到满,wrfull信号置为有效,阻止FIFO继续读入数据,rdreg有效后数据被读出,wrfull满标志延后两个周期变为0;

    2、 仿真验证

    在这里插入图片描述在这里插入图片描述
    分析:上图为最开始的几个周期,首先令wr有效512个周期,前8个周期输入为12345678(低四位),接着全是0;输入512个周期的输入到FIFO后,FIFO满(512word深),因此512周期后令wr无效、rd有效,读出先入先出FIFO数据;
    下图即为输出情况,512个周期处显示wrfull为1,即FIFO满状态;此时令rd有效后延时一个周期开始输出数据,最先输入的4321(64位)、8765数据输出后一直输出后面输入的0;因此FIFO波形验证正确;

    三、A级任务

    在B级任务的基础上,VHDL编程设计专门状态机与2片异步FIFO来实现乒乓操作。
    仿真时设置写时钟频率为40MHz(25ns),读时钟频率为10MHz(100ns);
    在这里插入图片描述
    两个FIFO交替进行读写操作,一个FIFO读时另一个进行写,写满后交替;
    关键在于状态机的设计,根据两个FIFO的wrfull、rdempty空、满标志的变化进行读写信号的改变;
    我的状态机共有三个状态,状态图如下:
    在这里插入图片描述
    其中,beg状态为初始时两块FIFO都为空,接下来x1、x2分别为写两片FIFO时的状态,beg状态在第一片FIFO的rdempty为0时直接进入写第一片的x1状态;
    根据条件与状态图写的VHDL状态机见工程文件;
    在这里插入图片描述
    波形分析:首先,开始写1号FIFO,先输入0x2341后输入全0,延时几个周期后rdempty_1为0,进入X1状态;
    接下来第二幅图为x1状态转变为x2状态,此时开始读1号FIFO,读出1432(低四位值)后读0,读操作正确;且此时开始写第二片FIFO,写入数据先写0x5678后写0;
    第三幅图为x2状态转x1状态,此时开始读2号FIFO,读出8765(低四位)后读0,读操作正确;且此时开始写第一片FIFO;
    这后两张波形图可以看出两个FIFO按照一定节拍在读写之间的正确转换;

    四、S级任务

    1、阅读AT24C02并理解图A IIC总线读取任意地址数据的时序

    在这里插入图片描述
    第一个start部分控制字节的R/W信号为低位(写操作),通过确认位确认后,发送字节地址给24C02来完成地址字节设置;字节地址发送完毕后,主器件接受确认信号产生起始条件(地址计数器设置完成写操作结束),再次发送控制字节(R/W位为1),24C02发出确认信号并开始发送数据字节,主器件不会再对数据传输确认但会产生终止条件。

    2、利用proteus仿真51单片机读取非易失存储器24C02C,掌握读写操作

    在这里插入图片描述
    读写过程: 首先长按改变地址按钮使地址为02,此时如上左图所示显示初始值FF,接着长按数据输入按钮到02,接着长按存入数据按钮,此时如上右图所示显示存入的数据02;

    3、对应示波器波形如下:

    在这里插入图片描述
    首先,SCL为高电平时SDA从高电平变为低电平表示起始条件产生;
    接下来的9个SCL周期,数据在高电平时稳定,低电平时才改变数据,因此数据有效,9个周期输入的数据为1010000000,此时第8个周期R/W为0,说明此时为写操作,第9个周期也为0,ACK确认位确认;(控制写操作)
    接下来的9个周期数据为000000010,ACK为0确认;(地址字节设置为1)
    又产生一个起始条件;后9周期数据为1010000110,R/W为1,读操作,ACK为0确认;
    再往后9个周期为000000110,此时读出地址1中的数据3,ACK不需确认;
    最后SCL为高电平时SDA从低到高变化,终止条件;(整体实现了读取任意地址数据时序)

    4、VHDL设计基于IIC总线的读取非易失存储器24C02C任意地址数据的接口电路

    尝试着使用计数的方法参考网上普通iic的VHDL去实现去实现接口电路,但是却一直未能仿真出结果,代码附在源码包中;

    电路:
    在这里插入图片描述

    波形与debugger中数据
    在这里插入图片描述

    展开全文
  • 本节来学习I2C接口下的AT24C02存储芯片分析,本节学完后,再来学习Linux下如何使用I2C操作AT24C02 1、I2C通信介绍 它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接受数据,是一个多主机的半双工通信方式。 ...

    https://www.cnblogs.com/lifexy/p/7793686.html

    本节来学习I2C接口下的AT24C02存储芯片分析,本节学完后,再来学习Linux下如何使用I2C操作AT24C02


    1、I2C通信介绍

    它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接受数据,是一个多主机的半双工通信方式。

    每个挂接在总线上的器件都有个唯一的地址。

    位速在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。

     

    2、I2C总线系统结构,如下图所示:

    其中SCL时钟线的频率由主机提供,且从机不能主动来引起数据传输,必须等待主机先发信号才行,两个或多个主机同时发起数据传输时,可以通过冲突检测和仲裁来防止数据被破坏。

     

    3、I2C时序介绍

    1)空闲状态

    当总线上的SDA和SCL两条信号线同时处于高电平时,便是空闲状态,如上面的硬件图所示,当我们不传数据时,SDA和SCL被上拉电阻拉高,即进入空闲状态。

    2)起始信号

    当SCL为高电平期间,SDA由高电平到低电平的跳变;便是总线的起始信号,只能由主机发起,且在空闲状态下才能启动该信号,如下图所示:

    3)停止信号

    当SCL为高电平期间,SDA由低电平到高电平的跳变;便是总线的停止信号,表示数据已经传输完成,如下图所示:

    4)传输数据格式

    当发了起始信号后,就开始传输数据,传输的数据格式如下图所示:

    当SCL为高电平时,便会获取SDA数据值,其中SDA数据必须是稳定的(若SDA不稳定就会变成起始/停止信号)

    当SCL为低电平时,便是SDA的电平变化状态

    若主从机在传输数据期间,需要完成其他功能(例如一个中断),可以主动拉低SCL,使I2C进入等待状态,直到处理结束再释放SCL,数据传输会继续

    5)应答信号ACK

    I2C总线上的数据都是以8位数据(字节)进行的,当发送了8位数据后,发送方会在第9个时钟脉冲期间释放SDA数据,当接收方接收字节成功,便会输出一个ACK应答信号,当SDA为高电平,表示非应答信号NACK,当SDA为低电平,表示为有效应答信号ACK

    PS:

    当主机为接收方时,收到最后一个字节后,主机可以不发送ACK信号,直接发送停止信号来结束传输。

    当从机为接收方时,没有发送ACK,则表示从机可能在忙其他事、或者不匹配地址信号和不支持多主机发送,主机可以发送停止信号,再次发送起始信号启动新的传输

    6)完整的数据传输

    如下图所示,发送起始信号后,便发送一个8位的设备地址,其中第8位是对设备的读写标志,后面紧跟着的就是数据了,直到发送停止信号终止

    PS:当我们第一次是读操作,然后想换成写操作时,可以再次发送一个起始信号,然后发送读的设备地址,不需要停止信号便能实现不同的地址转换

     

    4、AT24C02介绍

    AT24C02是通过I2C实现通讯的,是一个存储芯片,能够存储2kb(256字节)数据

    4.1 它的硬件图如下:

    其中A2~A0,是这个AT24C03设备的硬件地址,接GND表示硬件地址都为0

    4.2 其中AT24C02的数据格式如下所示:

    4.3 打开AT24C02数据手册,它的设备地址如下图所示:

    其中A2~A0表示硬件地址,P2~P0表示page页地址

    bit[0]地址:表示读/写状态,1:读,0:写(所有I2C器件都是这样的,最低位表示方向位)

    4.3.1 为什么需要page页地址?

    因为I2C的数据位是8位,而AT24CXX的读写地址值最大可以为2048(2^11),超过了I2C的数据位,而page页地址就是用来解决这个问题的

    比如AT24C16:

    当发送:0XA2(设备地址P[2:0]=0x01),0x00(读地址)时:

    表示要读的真正地址=0x01(页地址)*256+0(读地址)=0x100,转化为二进制=1 0000 0000

    当发送:0xA0(设备地址),0x00(读地址时):
    表示要读的真正地址=0x00*256+0xFF=0XFF,转化为二进制=0 1111 1111

    4.3.2 如上图所示,对于AT24C02来讲:

    • 芯片的容量小于等于2^8(256)字节,那么读写地址就用8bit来表示,所以设备地址里没有P2~P0
    • 读操作时,发送的设备地址等于0xA1
    • 写操作时,发送的设备地址等于0xA0

     

    5、AT24C02时序图介绍

    5.1 写时序介绍

    当随机写一个字节时,只需要先发送一个起始信号,然后跟上0xA0设备地址,以及要写的起始地址值,后面便是要写入地址的data,如果需要连续写数据,只需要连续写入dat,地址会自动加1,直到发送停止信号结束

    5.2 读时序介绍

    当随机读一个字节时,先发送第一个起始信号,然后写入0XA0设备地址和要读的地址值,

    接着发送第二个起始信号,然后写入0xA1设备地址,接着就是要读的data,如果需要连续读数据,只需要连续读出data,地址会自动加1,直到发送停止信号结束

     

     

    最后总结一下:

    展开全文
  • 北京时间3月24日上午消息,由于供应趋紧和...由于各大企业都在争相开发体积更小、效率更高的芯片,引发了供应瓶颈,但与此同时,智能手机、人工智能、无人驾驶汽车和物联网的数据存储需求却在飙升,导致全球存储芯片...
  • 这项工作的核心是我编写的一小组宏指令,用于分析ALPIDE弯曲的芯片,该芯片正在研究中,以便在CERN LHC Long Shutdown 3(LS3)期间升级ALICE内部跟踪系统(ITS3)。 简短的安装说明 测试光束在DESY进行,并进行...
  • 几中常用数据存储方式的风险分析 1U 盘 1.快闪的 U 盘数据备份形式因为芯片本身的易损性和读写次数限制使用 U 盘备份时很 容易造成数据片的丢失甚至损毁对于重要的企业财务数据而言是目前使用方式最多 也是最危险的...
  • 摘要:文章详细介绍了IDT公司生产的新型先进先出异步CMOSFIFO存储寄存器芯片IDT7203的组成结构、功能原理和运行方式,分析了它的字长和字深的扩展方法。给出了IDT7203芯片在虚拟示波器硬件系统设计中的应用方法。 ...
  • 北京大学李老师,索尼SONY820E摄像机内置64G存储卡,摄像机无法识别,里面存有远赴韩国旅游拍摄的MP4高清视频,第一次送到南京某数据恢复公司恢复失败,经我司两天的分析数据完美恢复!该存储卡直接通过类似CE线...
  • 如果内部FLASH存储完我们的代码还有剩余的空间,那么这些剩余的空间我们就可以利用起来,存储一些需要掉电保存的数据。本文以STM32103ZET6为例。STM32103ZET6属于大容量产品,其闪存模块组织如下:其主存储器大小为...
  • 前者具有容量大、读写速度快、芯片面积小、单元密度高、擦除速度快、成本低等特点,更适合于大批量数据存储的嵌入式系统。如今Windows仍是桌面系统的主流,对FAT文件系统提供了天然的支持。然而就技术而言,FAT文件...
  • 人工智能芯片产业发展分析 人工智能浪潮来袭芯片厂商群雄逐鹿 信息技术行业 报告要点 芯片为人工智能的发展奠定技术根基 人工智能是未来科技发展的战略制高点已成市场共识其核心的算法主要基于成熟的神经网络算法...
  • RICS-V和ARM与X86三种芯片架构分析

    千次阅读 2019-09-23 14:12:49
    早在10多年前,我们对芯片的理解是停留在IT时代,当时候主要是计算机的发展带来的芯片的发展,到了最近10年的发展,越来越多的设备开始有芯片,有操作系统,有数据存储。特别智能手机的出现,带动了移动设备的快速...
  • 利用大容量TF存储卡实现数据的海量存储,并通过并口转USB芯片及相应的上位机软件实现数据上传以便进行事后分析.目前,该数据采集存储系统已在相关实验项目中得到应用,并获得了良好稳定的实验结果.  0 引言  ...
  • Python数据分析数据分析是Python的杀手锏。” ——佚名 数据分析在自然科学、生物医学和社会科学领域有着悠久的历史。目前,如雷贯耳的大数据虽然尚没有严格的定义,但是它对数据分析工作的影响是毋庸置疑的。下面...
  • 其采样数据是波形运算和分析的基础,直接影响到整个数字存储示波器的准确性。从这点出来,提出采用现场可编程逻辑器件( FPGA)作为数字存储示波器采样控制系统的核心,是德科技数字存储示波器作为测试技术的重要工具...
  • 为解决当前固态存储系统有效适应大规模数据高速存储的问题,以NAND Flash为存储介质,利用循环SRAM缓冲、多体存储阵列、交叉开关矩阵等技术实现了低速Flash芯片阵列构建的嵌入式高速数据存储机制.其中SRAM缓冲阵列...
  • AI芯片:Google TPU分析

    2021-01-31 12:24:45
    In-Datacenter Performance Analysis of a Tensor Processing Unit TPU被设计为PCIe上的协处理器,可以像GPU一样插入到服务器中...用于存储输入数据(DMA传输)和产生的中间结果; MMU:256 x 256 x 8bit的乘加单元。.
  •  本设计使用8 GB的SDHC(High Capacity SD Memory Card,大容量SD存储卡),为了方便卡上数据在操作系统上的读取,以及数据的进一步分析和处理,在SDHC卡上建立了FAT32文件系统。  1SD卡接口的硬件设计  STM32F
  • 利用大容量TF存储卡实现数据的海量存储,并通过并口转USB芯片及相应的上位机软件实现数据上传以便进行事后分析.目前,该数据采集存储系统已在相关实验项目中得到应用,并获得了良好稳定的实验结果.  0 引言  ...
  •  在一些特殊的工业场合,有时需要将传感器的信号不断的实时采集和存储起来,并且到一定时间再把数据回放到PC机中进行分析和处理。在工作环境恶劣的情况下采用高性能的单片机和工业级大容量的FLASH存储器的方案恐怕...
  • Ti公司DSP芯片特点技术发展历程和现状及其应用实例分析 一Ti公司DSP芯片特点 特点 哈佛结构 哈佛结构是不同于传统的冯诺曼Von Neuman结构的并行体系结构其主要特点是将程序和数据存储在不同的存储空间中即程序存储器...
  • 在一些特殊的工业场合,有时需要将传感器的信号不断的实时采集和存储起来,并且到一定时间再把数据回放到PC机中进行分析和处理。在工作环境恶劣的情况下采用高性能的单片机和工业级大容量的FLASH存储器的方案恐怕...
  • 为集中监控工业现场的大量自动化仪表,提高工业生产中的自动化水平,现以S3C2410A为主控芯片,以液晶屏为显示设备,以触摸屏为输入设备,以SD卡为存储设备,设计一种电力设备数据记录分析仪。记录仪支持CAN通信与485...
  • 其采样数据是波形运算和分析的基础,直接影响到整个数字存储示波器的准确性。从这点出来,提出采用现场可编程逻辑器件( FPGA)作为数字存储示波器采样控制系统的核心,是德科技数字存储示波器作为测试技术的重要工具...
  • 为集中监控工业现场的大量自动化仪表,提高工业生产中的自动化水平,现以S3C2410A为主控芯片,以液晶屏为显示设备,以触摸屏为输入设备,以SD卡为存储设备,设计一种电力设备数据记录分析仪。记录仪支持CAN通信与485...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 459
精华内容 183
热门标签
关键字:

存储芯片数据分析