编程器读取EMMC出现数据错误

编程器读取EMMC出现数据错误,第1张

第一步:确认EMMC的空间大小(详细步骤见第四步)
第二步:确保U盘是FAT32格式,并且有足够的剩余空间(U盘的空间大小必须是大于或等于EMMC的空间大小),然后插入到TV上
进入Mboot控制台的方法
第一步:连接串口
第二步:TV上电,上电的过程中按住“Enter”键不放,待出现: 时,松开“Enter”键,进入Mboot控制台。
查看Emmc大小的方法
第一步:TV上电,上电的过程中按住“Enter”键不放,待出现: 时,松开“Enter”键,进入Mboot控制台。
第二步:输入mmc size可以查看emmc的大小。目前4G的emmc大小为3959422976 bytes,即0xEC000000;8G的大小为7952400384 byte,即0x1DA000000。
读取EMMC数据的方法
1对于4G的读取EMMC数据
第一步:插入大于Emmc空间的U盘至TV的USB端口
第二步:上电之后进入mboot控制台(详细步骤见第3步)
第三步:输入命令emmcbin,查看是否可以成功查找的U盘,若查找失败,如下图(查找失败的情况如下:1U盘的空间大小小于Emmc的空间 2USB端口没有被识别,需更改其他的端口,依次遍历其他USB端口);若查找成功,则进入步骤“第四步“

分辨手机主板上的eMMC有如下几种方法:

1、看尺寸:

手机存储一般是eMMC或者eMCP,这些芯片的封装有如下几种标准:115mm13mm、12mm16mm、10mm11mm,是这些封装的,100%是eMMC芯片;

2、看功能:

有可能部分eMMC会叠在CPU下面,这种比较难找,比较典型的就是iPhone;

3、看拆机文章

很多网站会在手机出来一段时间后,写出一篇拆机文章,可以从文章里面找到eMMC芯片,比如:

-高通芯片目前最常用的有两种字库。一种是emmc 一种是ufs。新版本常用为ufs 。刷机前要明白自己机型的字库是那种。要选择好 否则刷写不了。那么怎么分辨自己机型的字库是那种型号呢。其实很简单。看刷机包里面的引导或者脚本分区。
上图 8953引导里有emmc就是emmc字库固件。另外他固件包里只有一个脚本rawprogram0xml 。这种方式就是emmc字库固件包
ufs固件包和上面鉴别的方法一样。看引导 类似下图
845引导里面有ufs字样。他的脚本里有awprogram0-5的几个文件。他就是ufs固件,这些都是刷机的基本常识哦
miflash 小米刷机平台
这个平台的版本也较多。而且类似的教程也很多。刷机 *** 作技术含量不高。简单给大家介绍几句
一般注意以下几点
1----下方的三个选项要分清楚具体作用。全部删除与保留用户数据方式刷完固件后不会关闭bl锁。最后一个选项会关闭bl锁。
2----此平台会9008端口和fast模式都可以刷入。区别是加载的刷机脚本不同。另外有的机型9008刷写需要权限。
3----他区别与qpst平台。无需手动加载脚本。平台会默认加载。傻瓜式刷机工具
adb脚本刷机
这个刷机模式可能很多友友比较陌生。但优点很多。他可以无视大多数的电脑系统环境问题。而前面介绍的两种平台需要安装对应的插件和系统运行环境才可以完美运行。
adb脚本可以fast模式刷写还可以9008进行刷写。这方面对于普通友友来说应用面不是太广,就不多介绍。其中最典型的就是坚果锤子系列的官方9008包里都带脚本刷写。有兴趣的友友可以研究下。
今天的教程就写到这里。当然高通还有很多刷机平台。例如上个教程之中的vivo机型刷机平台里也有高通线刷方式。还有很多机型自带的官方线刷平台。例如金立 美图 努比亚 oppo 360等等这些机型都有专用的平台有的官方固件必须要使用自带平台才可以刷写,有的固件可以通过第三方软件解包后使用其他平台刷写。明白其原理。一通百通。友友们可以参考。
关注我 了解玩机搞机基本常识和一些简单的问题解决。伸出你那双可爱的双手点个赞赞吧
打开CSDN,阅读体验更佳
卡刷包转线刷包工具_qpst刷机(翻到高中刷机时的记录,想来qpst对现在玩机
(1) QPST Configuration 英文好点的,就知道这个是配置工具,对QPST服务进行配置,我们进行端口查询,就是靠它,找到端口,才能跟手机进行数据传输。 (2) eMMC Software Download 这就是我们主要的刷机工具了,在emmc上Download数据。现在的大
继续访问
[Android - QPST] 高通刷机/QPST刷机_weixin_30485799的博客-CSDN
[Android - QPST] 高通刷机/QPST刷机 参考网站: >

使用闪存测速工具AndroBench50以上。现在华为应用市场下不了这个软件了,因为此闪存测试软件已经被下架了,更要注意是尤其千万不要更新系统,华为会以系统不兼容而阻止安卓此软件。(华为此举就是心虚,忽悠国人)


如果华为p10用androbench50测试闪存速度,有三种连续读取速度:
UFS21:700MB/s
UFS20:600MB/s
eMMC51:250MB/s。


如果买到emmc51,恭喜你中奖了,赶紧退货吧。
搞不好华为P10和P10 Plus很多暗病和偷工减料。
华为P10和P10 Plus运存可能是LPDDR3和LPDDR4混用,不是单纯宣传的LPDDR4。
要是想退货,直接退,不行的话,直接投诉消协解决。

华为P10,是华为公司旗下一款智能手机。2017年2月26日下午,华为正式对外发布年度旗舰机P10和P10 PLus。欧洲售价64GB+4GB版P10为649欧元,64GB+4GB版、128G+6GB版P10 Plus分别为699欧元及799欧元。

Arm板系统文件一般有三个——bootloader(uboot)、kernel(uImage)及根文件系统(rootfs)。在arm板上电后,按uboot->kernel->rootfs的顺序依次启动。由于开发板上有多种存储介质,三个文件可以放在任何可以存储的介质上,因此也就导致文件的多种启动方式。本文就来讨论,以上三个文件对应不通存放位置的不同启动配置。
一般开发板上会有flash(Nor or NAND),mmc,emmc,sd卡等。系统文件可以烧写在其中的任意一种上,因此也就对应不通的启动。在开发过程中,有时经常需要改动内核,或者修改应用程序,如果每次都修改后都重新烧写到板上的存储介质,会比较麻烦。因此,为方便调试,uImage和rootfs还可以从网络启动,即nfs启动。但uboot只能从板上介质启动。
启动过程其实是先将要启动的文件从存储位置拷贝到内存空间,再在内存中运行。因此所谓不同位置启动,也就是从不同位置拷贝而已。
下面我们以开发板启动为例,分别介绍三个文件从不同位置启动的过程方法。我使用的开发板上有emmc和两个sd卡。我们按照启动顺序,依次介绍。
首先是uboot启动。Uboot是三个系统文件中第一个启动的,对它的拷贝工作由cpu中的固件决定。固件中支持从几个位置拷贝uboot,它就能存放在几个位置上。至于每次启动具体从其中的哪里开始,硬件拨码开关决定,对应拨码在开发板手册上能查到。启动之前,先将uboot的二进制文件拷贝到对应介质。有两种不同方法烧写,如下:
1 uboot二进制文件拷贝到emmc,是通过芯片供应商的下载工具软件烧写完成;
2 拷贝到sd卡是在linux下,通过dd命令完成的。
烧写完成后,将启动拨码拨到对应位置即可启动uboot。
然后介绍kernel文件(uImange)和rootfs的启动。如上所述,uImage和rootfs可以从emmc、sd卡或nfs拷贝到内核启动。具体的启动位置由uboot中的参数传递的内容决定。这些参数的内容在uboot中有写死的值,也可以在uboot启动阶段进入到命令输入界面,修改这些参数的值,来改变启动位置。(作者:围补)
进入uboot命令界面后,输入如下一段命令,修改启动参数,并重启。
setenv loadaddr 0x10800000

setenv bootargs_base 'setenv bootargsconsole=ttymxc0,115200'

setenv bootargs_mmc 'setenv bootargs${bootargs} root=/dev/mmcblk0p1 rootwait rw video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 ip=dhcp'

setenv bootcmd_mmc 'run bootargs_basebootargs_mmc;mmc dev 1;mmc read ${loadaddr} 0x800 0x2000;bootm'

setenv bootcmd 'run bootcmd_mmc'

saveenv

run bootcmd
命令输入完后,重启开发板,即可按照上述命令中设置的参数来启动系统。
下面我们来分析一下uboot阶段输入的启动参数的意义,以便读者自己修改相关内容,让板子从自己需要的位置启动。
首先介绍几个命令。是在上面看到最多的setenv命令,该命令使用来设置或删除某个环境变量的。当setenv后面只带一个参数,该参数必须为已有的变量名,输入命令回车后该变量即被删除;当setenv后面有多个参数,将把其后第一个参数作为环境变量,后面其他参数作为该变量的值或内容。
第二个要解释的命令mmc。在uboot命令界面中敲入mmc,回车,能够看到其多个用法:
Usage:
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
mmc part - lists available partition on currentmmc device
mmc dev [dev] [part] - show or set current mmcdevice [partition]
mmc bootpart [dev] [part] - show or set bootpartition
mmc list - lists available devices
解释一下其中几个用法:
mmc read addr blk# cnt 用来将硬盘(emmc/sd)中的内容读取到内存中。其中addr指内存中的目标位置起始地址,blk#指被拷贝内容起始存储块的块号,cnt指要被拷贝的块数。一般每个块的大小为512byte。
mmc dev [dev] [part] - show or set current mmc device [partition] 显示或设置当前设备。命令mmc dev即为显示当前是哪个device;mmc dev #意为设置“#”为当前设备。
第三个命令saveenv是保存环境变量的意思。环境变量设置后,使用该指令保存,下次重启时会按照上次保存的设置启动,就不用再次设置了。
最后,run命令比较明显,“运行”的意思。一般加在某内容为可执行命令的变量前。
再来说明一下变量。在上述参数设置命令中,参数bootargs和bootcmd是uboot的参数,其功能和名称不能被改变,其他都是用户自定义的变量,可以改变其名称。其中bootargs代表由uboot传给内核的参数;bootcmd是uboot启动时,系统自动加载的命令序列。如果设置了启动参数后,想让系统下次自动按照本次设置的方式启动,则一定要把拷贝和启动内核的语句设置为bootcmd的值,否则下次启动无法自动加载并启动内核。(作者围补)
介绍完重要的命令及uboot环境变量后,我们再来看上面的启动参数设置命令行:
setenv loadaddr 0x10800000

setenv bootargs_base 'setenv bootargsconsole=ttymxc0,115200'

setenv bootargs_mmc 'setenv bootargs${bootargs} root=/dev/mmcblk0p1 rootwait rwvideo=mxcfb1:dev=ldb,LDB-XGA,if=RGB666video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 ip=dhcp'

setenv bootcmd_mmc 'run bootargs_basebootargs_mmc;mmc dev 1;mmc read ${loadaddr} 0x800 0x2000;bootm'

setenv bootcmd 'run bootcmd_mmc'

saveenv

run bootcmd
按照上面对命令和参数的讲解,做一些变量的替换之后,可以看到,此处只做了两件事,一是设置环境变量bootargs的值,二是设置bootcmd的值,并保存。其中bootargs的值传递给内核,用来初始化一些设备和启动rootfs;bootcmd的值用来启动内核,即自动加载的命令序列。(最后一句run bootcmd是启动,不再是设置命令了。)
对上述命令中,采用如此多自定义变量的原因是,有些调试工具命令行输入不能过长,因此用中间自定义变量缩短一次性输入的命令行长度。我们将不必要的自定义变量做替换掉,然后来分析其内容。
setenv bootargs console=ttymxc0,115200root=/dev/mmcblk0p1 rootwait rw video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24ip=dhcp

setenv bootcmd 'mmc dev 1;mmc read0x10800000 0x800 0x2000;bootm'

saveenv

run bootcmd
将自定义变量替代掉后,能看到,参数设置其实就是做了对两个系统环境变量赋值的工作。下面具体分析各变量值得内容。
对bootargs的赋值,对要是跟rootfs启动相关。内容是一个很大的字符串,不同项之间由空格隔开,也可以把由空格隔开的多项看做是多个参数。
第一项是console=ttymxc0,115200是选择 *** 作台,并设置波特率。
中间几项root=/dev/mmcblk0p1 rootwait rw,是对rootfs启动位置设置root=/dev/mmcblk0p1是指从设备mmcblk0的p1分区挂载rootfs。那么mmcblk0到底是哪个设备呢?由于文件系统的挂载是在kernel启动后进行的,而内核启动后会安装linux的分配方式给现有设备分配名称,因此可对应区分设备。我使用的开发板上,emmc即为mmcblk0设备,sd安装挂载顺序依次后排。如果多个卡槽在系统启动前都插上了sd卡,系统会安装sd卡槽所在接口号依次分配设备名称号。比如,两个sd卡槽,slot2和slot3(对应总线号),只插一个sd开始,无论在哪个槽都是mmcblk1;但两个都插上sd时,在slot2中的是mmcblk1,slot3中的则是mmcblk2。Ok,至此,从哪个设备挂载rootfs已经很清楚了。后面两个参数,rw是声明启动权限,即以读写方式启动;rootwait是指等待设备/dev/mmcblk0p1设备就绪后才尝试挂载rootfs。如果没有此参数,linux内核启动时可能会在存储设备尚未就绪是就尝试挂载rootfs,此时肯定挂载失败,那么启动也就失败了。
最后的几个参数,video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 ip=dhcp,是做一些设备初始化的,主要是对视频设备和网络,对不需要视频设备的嵌入式系统可以不设置此项,ip也可以单独设置。
然后是第二个环境变量bootcmd的设置,主要跟kernel启动相关。
setenv bootcmd 'mmc dev 1;mmc read0x10800000 0x800 0x2000;bootm'
设置bootcmd内容为命令序列,用用单引号包围,命令间由分号分隔。
按照上面对mmc命令的讲解,第一个命令mmc dev 1,意思是将dev 1设置为当前设备。这里就是uImage启动(拷贝)的位置。在我使用的开发板上,dev 1指放在卡槽slot2中的sd卡。此处由于linux内核没有启动,设备名称不能按照linux分配方式确定。在我使用的开发板上,dev 2是放在卡槽slot3中的sd卡,dev3是emmc。对此句做相应修改,即可更改内核启动位置。
mmc read 0x10800000 0x800 0x2000这句大家也应该可以明白意思了,即将存储设备上从块号0x800开始的0x2000个存储块的东西拷贝到内存0x10800000开始的空间内。
bootm也是uboot命令,用于加载uboot能辨认的 *** 作系统映像。

eMMC、UFS20、UFS21其实是三种闪存协议,在速度上eMMC51最快可以达到400MB/S,而UFS20则是7424MB/S,UFS21更是达到了恐怖的145GB/s,当然以上数据都是理论带宽,实际上测速远没有这么高下载androbenc测试,ufs21的速度大概在七八百兆,ufs20在五六百,emmc在两三百

1、确认你的电源和RESET信号有无异常
2、尝试读写你的EMMC IC
3、如果 *** 作失败,那么请测试下CLK、CMD及Data信号,是否有不通的情况
如果硬件都无异常,那么你就好好检查软件方面的设置吧!

具体用法如下:
按照点位,分别焊接CLK、CMD、D0、GND,短接晶振两端。将焊好的ISP线插入RT809H编程器的ISP端口,主板上电。

打开RT809H编程器 *** 作界面,点智能识别:EMMCISP。点设置,选择好读写分区和VCCQ,确定。点读取,选择存放位置,修改容易识别的文件名,点保存。

读取到2%时点取消。点擦除,提示:写入前软件会自动擦除EMMC对应区域,是否需要手动擦除EMMC所有区域的数据?点确定,开始擦除数据,稍后提示擦除成功。

点写入,选择文件路径,双击任意一个文件开始写入。写入2%时点取消。拔掉ISP线,连接RX、TX查看打印信息,设置好RT809H,取消晶振短接线,打开SecureCRT并连接,主板上电,查看到引导是否写入正确。关闭主板电路,插入厂家升级文件到USB端口。按住Enter键,主板上电,直到出现控制台。

在控制台下输入cu后回车。自动识别到升级文件,开始升级,耐心等待升级过程。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12678902.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存