快讯
HOME
快讯
正文内容
nand flash改spi 给路由器更换flash(结尾有彩蛋)
发布时间 : 2024-10-05
作者 : 小编
访问数量 : 23
扫码分享至微信

给路由器更换flash(结尾有彩蛋)

刚刚休着闲两天,于是论坛又开展一轮DIY的活动。

这次还真是少不了从论坛拿到的宝贝……

首先这就是曾经从论坛得到的无线小路由WR700N了,

楼主期待有一天能给它刷个openwrt。

话说我倒也不缺路由器,只是这两天闲下来,想起了这个事,于是来搞一个。

由于这个路由的Flash只有2MB,根本不足以写入op,所以不得不给它换个flash啦。

楼主是纯软件出身,这个焊活,虽然只有8个脚,那也是个老大难问题了,所以一直也没有做过尝试,不过这次真是豁出来了,拿出来练练手吧。

提前准备好各种材料:W25Q64(8MB的Flash)芯片若干,相应的烧写座一个。

思来想去的,不买烧写器了,DIY嘛,就得自己动手,丰衣足食。OK,DIY一个简单的烧写器——烧写器,二楼见~

东西都到手,等到中秋节,咱沐浴更衣焚香祷告,开始动手。

首先肯定是拆……拆WR700N这个东西,需要到网上参考一个内容(China[拆哪],破拆高手多,先请教一下机壳的卡点,避免损坏外壳)。于是根据指示开始暴力开壳。

得到了WR700N的核心,正面处理器和内存贴着签不拍照了,后面的SPI Flash坦荡荡。

拆的话应该是比较容易的……可是楼主还是很悲催的伤到了焊盘,5脚的焊盘就那样悬着…这家伙那可是数据输入信号啊……不会最后悲剧了吧。

步骤一,利用烧写器将拆下的Flash中,最后64K的数据取出来,留下备用。这个东西在路由界被称为art,里面存有路由信号有关的调整数据,没有了它,剩下的硬件就无法发挥它的最佳水平。

步骤二,从网上下载一个叫breed的东西,这个可以替代uboot启动路由器,而且利用它,可以随时随意刷路由的系统了。

步骤三,将breed烧写到Flash的0起始的位置上,内容并不大,所以可以再读出来,干脆读出来0x15000,和原始的breed比较一下,发现有效数据是一致的,OK可以继续了。

步骤四,(此步骤可省略,当时我不懂,之后我懂了。该步骤烧写art到Flash上,但实际breed可以直接写art,所以最好让breed来做这件事)

步骤五,接下来就把Flash焊回到板子上。我没做过这个,还是需要很小心的处理……

接下来就可以上电操作啦……所以后续就仅是调试过程了。

Orz起不来。

蓝色的指示灯亮了,但还是很暗,我甚至怀疑这个是不是板子坏掉了。事实证明,只是起不来,所以灯也是异常状态了。

于是插上逻辑分析仪排错。这个过程中,我发现,电源电路到主板电路转换的过程中,留下了5V的测试TP,所以只需要找一个5V电源,接过来就可以方便的调试了,不必插在墙上看效果。事实上,我直接用测试夹夹在相连的电容脚上,很方便。

于是一个脚一个脚看,发现/Hold脚拉低了。查一查类似的路由器的电路图,发现这个脚是在外部利用电阻直接拉高使用的,所以……是不是我把焊盘焊坏了……

就是这么果断,立刻找了个10K电阻焊上了。继续启动……还是起不来。

再检查,发现逻辑分析仪上是有正确数据的,这回惨了,看来板子出问题了。

喝了一杯酸奶压压惊,之后决定继续差错看看,结果很偶然地,用万用表发现Flash的4脚(GND)信号上,电压不为0,而且还有浮动。

再一想,糟了个糕,我一直关注的是Flash引脚上有没有数据,可是这样是不能保证焊盘上也能正确的得到这些数据的……也就是说,输入到Flash的信号,目前来看都是正确的,但是输出出去的信号,可能有虚焊!所以,起先我所担心的5脚,竟然完全没问题~,再所以,/Hold脚也许也是虚连了所以看起来是拉低的……

于是用万用表使劲测4脚,发现确实和下面的焊盘虚连着,甚至稍使劲压,也接触不到,看来是中间有松香层阻碍电流了。

所以拿起烙铁,把这几个脚又焊一次,顺便把自己加的电阻摘除。这一次每个脚都稍用力往焊盘上压实一点。看来第一次焊太小心,虽然焊锡融得很漂亮,可是反倒是没有焊上。

之后再通电,终于一切正常,灯也亮了,接在PC上,PC网口也亮了。Oh Yeah~

再然后用PC登陆192.168.1.1,设置breed里的信息,主要包括Mac地址和art上传,

之后找到可用的openwrt固件包,上传启动 ~

Orz,完全不能用。……

后来利用uart接收主板上的TP数据,发现启动linux内核时,内存不足,挂了。

按理说不应该的,网上说WR700N是2M ROM 16M RAM呀,应该可以啊……额,网上说??……起开内存上的贴签,发现这个货是8M内存。

所以……又要DIY改66pin的内存颗粒了??

好吧,暂且认为本次DIY完成,毕竟原始目标也就是换个大点的Flash。

换RAM的事情,就滚到下一期DIY再说吧。

总结了经验教训。第二天,楼主把另外一个路由的Flash给换了,很快就完成了。

恩,心情不错。

接下来说说用D21的板子做的烧写器,

对于SPI Flash来说,只要一个SPI,就可以进行读写等各种操作了。

所以D21绰绰有余。

装上AStudio,驱动SPI,找到读写代码(针对我买的Flash,我发现D21原带的那个AT25DFX驱动有点不匹配),做个试验,利用uart将读出来的东西发回到电脑上。为了避免干扰,连接上我换了一个SPI

数据可以正常发送到PC,可是怎么能保存到文件呢?这个方向其实很好解决,利用强大的putty,使用串口方式连接,然后修改连接设定中的logging,选择保存全部的log,指定目标的文件,应用以后,串口收到的内容就会直接写到文件里啦。

经过测试,读和写都没有问题啦,那么就可以利用这个家伙把breed写到Flash中了。

可是楼主还是懒于写一个程序来控制上下位的通信,所以干脆,把breed直接放在D21的程序里,幸亏breed才100k,D21还容得下它。

烧写.JPG (48.05 KB, 下载次数: 0)

下载附件 保存到相册

2015-9-30 03:04 上传

于是可以继续使用了,通用的Flash烧写工具……还是以后再做吧。

可以看到,自己动手做的烧写器真的非常实用,而且还避免了板子吃灰,有效提升了板子的价值,特别是这类体积小、功能多的精品开发板。

所以……如果不是有特殊的需求,……

我劝你还是尽量花几十块钱去大TB买个烧写器吧……

DIY时,还无意中发现了自己刚进入工作的时候,不懂硬件不懂电子,为了大概学习一下,后来根据网上一个帖子,DIY的4位加法计算机……全是非门……

最后又帮朋友做了这么个东西……我只负责提供线和加工,不负责提供主要原料,所以配色样式就无可挑剔了……

是个插笔的挂帘……

顺手给闺女做了副鞋垫,资源有限,也没给包个边……

严格遵守了老人的要求:线要密要多,才结实……这下大家满足了吧

以上图文内容均是EEWORLD论坛网友: sjtitr 原创,在此感谢。

欢迎微博@EEWORLD

如果你也写过此类原创干货请关注微信公众号:EEWORLD(电子工程世界)回复“投稿”, 也可将你的原创发至: bbs_service@eeworld.com.cn,一经入选,我们将帮你登上头条!

与更多行业内网友进行交流请登陆EEWORLD论坛。

SPI-Flash是什么?使用注意事项及常见问题

一.概念:

SPI:serial peripheral interface

串行接口设备,spi flash 就是通过串行的接口进行操作的flash存储设备

flash按照内部存储结构不同,分为两种:nor flash和nand flash。这里spi flash 属于 nor flash!

spi flash 读写较慢,次数有限制,一般用于不经常更改的存储。

早期Norflash的接口是parallel的形式,即把数据线和地址线并排与IC的管脚连接。但是后来发现不同容量的Norflash不能硬件上兼容(数据线和地址线的数量不一样),并且封装比较大,占用了较大的PCB板位置,所以后来逐渐被SPI(串行接口)Norflash所取代。同时不同容量的SPI Norflash管脚也兼容封装也更小。,至于现在很多人说起NOR flash直接都以SPI flash来代称。

二、SPI FLASH读写介绍

对flash芯片的操作,一般包括对flash芯片的擦除,编程和读取,各大厂商的SPI flash芯片都大同小异,操作命令基本是没什么变化的,当我们拿到一款芯片,要特别注意芯片的容量,操作分区等。

其实,无论是对芯片的擦除,编程还是读取操作,我们大致可以按照以下的套路来:写命令---写地址---写(读)数据。正如以下的时序图一样清晰明了,我们先把片选信号拉低,再依次写指令,地址和数据,就可以对FLASH芯片进行操作。

掌握以上方法,就可以轻松操作SPI flash芯片了,当然,对时序这种底层的操作,还需要不断学习和积累,不论是用FPGA还是MCU,最终都是为了产生时序信号,只要静下来认真理解了它,一切问题就迎刃而解了。

三.注意事项

1.不同的SPI FLASH芯片可能会提供的擦除方式:扇区擦除(4KBytes),半块擦除(32KBytes),块擦除(64KBytes),片擦除。

2.不同的SPI FLASH芯片可能会提供的编程方式(也就是写数据):页编程(256Bytes),扇区编程(4KBytes)。

3.SPI FLASH如果擦除过,在往里面写0xFF这样的数据意义不大,因为它的特性就是擦除后数据就是0xFF。

4.写入flash时,只能把数据(bit)从1该为0。

5.传统的EEPROM的特点就是可以随机访问和修改任何一个字节,可以往每个bit中写入0或1。而写入flash时,只能把数据(bit)从1该为0。但是传统的EEPROM容量因成本的缘故收到限制,绝少有超过有512K的。

6.Nor Flash容量相对小,成本高,基本没坏块,数据线和地址线分开,可以实现随机寻址,读取任何一个字节,擦除任然要按块来擦。NAND FLASH容量大,成本低,坏块经常出现,但可以标记坏块,使软件跳过,数据线和地址线复用,按块擦除按页读取。

四、项目实操中的问题

项目中需要用到SPI flash,在使用这个4MB 的SPI flash中出了三个问题让印象深刻,特记录下来以作提醒

问题1:我们知道SPI flash也分主从模式,一般master都是有MCU等器件担当的,而slave有SPI器件担任,笔者的这个小系统同样如此。

并且MCU是自带有SPI controler,接线方式依然是四线解法,SCK,CS,DO,DI,在看手册的过程因为自己的不注意,看到描述是“user can

decide the SPICS configuration in the master mode,if P_IO_Ctrl[10] set 1, the IOA[12] as GPIO function, if P_IO_Ctrl[10] set 0, the IOA[12] as SPICS hardware function” 我当时没有好好体会这句话的意思,简单的认为我在使用SPI flash之前就k肯定需要把P_IO_Ctrl[10]设置为 0, 其实这是错误的认识。

因为现在是通过MCU对slave SPI器件操作,首先肯定是需要MCU端来选中SPI器件,从master角度来讲,只需要一个GPIO信号线接到slave的CS端,同时输出低电平就相当了选中了这个slave了,之所以如此说法是因为这是从slave角度来说的,相当于MCU现在也作为一个slave,另一个MCU控制这个slave,则这时候SPI 初始化时就需要把 P_IO_Ctrl[10] set 0

问题2:需要一个烧录器向SPI flash中烧写内容,用的是西立特公司的superPro,但烧录步骤错误了,忘记了在编程之前必须要erase,

了解了一下,好像是和nor flash一样的介质,擦除会把所有bit置1,在编程的时候根据需要只可以把相应位置0.

问题3:在使用MCU上一个SPI 控制器接口接SPI flash时,没有交叉连接,即MCU 的DI应该接SPI 的DO,MCU 的DO应该接SPI 的DI。

相关问答

基于dsp的 spi 驱动 flash 流程是怎样的?

1、根据单片机手册编写SPI接口驱动,确保SPI接口可以正常通信,只要按照手册说明操作控制几个寄存器即可,比较简单;2、根据你选用的Flash编写FLASH读写驱动,...

两款芯片硬件都支持 SPI 通信,如何实现两芯片之间的数据通信啊?

两款芯片都支持SPI,不一定可以拿来通讯。道理很简单,SPI是分主从的,如果两块芯片都只能做从设备,是不能通讯的,比如两块SPIFlash,或者别的SPI外设。如果...

spi 接口的主从设备怎么接?

SPI接口的主从设备接法如下:-主设备(Master):时钟信号产生器,驱动SPI总线。比如单片机、MCU等。-从设备(Slave):接受主设备发送的时钟信号。比如SPIF...

请问如何将图片及字符烧进 SPI Flash 并读取显示?

转换为bin再写入spiflash,人为定义spi的区域划分,不同的图片方法不同的起始地址。bin文件放在SD卡中,通过读SD卡再写入SPIFLASH转换为bin再写入spiflash,.....

spi 双启动是什么?

SPI双启动是指同时使用内部启动(内部Flash)和外部启动(外部SPIFlash)两种方式来启动设备。在这种模式下,设备的启动顺序可以在软件中进行设置。例如,可以...

SPI 、I2C、USART等协议有什么共同点和区别?

这个,还是先说说三种协议的特点吧。1、SPI。串行通信协议,全双工的同步通信总线协议,要分主从,要占四根线(四个管脚),算是速度比较高的一种了(这三种...它通讯...

串口与 SPI 口有什么区别?

SPI与RS232的区别:1、spi:高速同步串行口。是一种标准的四线同步双向串行总线。spi,是英语SerialPeripheralinterface的缩写,顾名思义就是串行外围设备接...

flash 模组是什么?

Flash模组是一种集成了闪存存储器的模块。闪存是一种非易失性存储器,可以在断电后保持数据的存储。Flash模组通常用于嵌入式系统和电子设备中,用于存储程序代...

qspi协议?

QSPI是QueuedSPI的简写,是Motorola公司推出的SPI接口的扩展,比SPI应用更加广泛。在SPI协议的基础上,Motorola公司对其功能进行了增强,增加了队列传输机制,...

我在stm32外加了sram和 flash 怎样让程序从片外的 flash 启动?

方法一:从flash旧扇区,取出1k数据到ram,放到flash新的扇区;从flash旧扇区,取出第2个1k数据到ram,放到flash新的扇区;重复至取完,然后再擦除flash旧扇...方....

 袁崇焕公园  中国邮政培训学院 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部