您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> FLASH 读写的问题
本帖共有1525个阅读者
发表帖子 发表投票 回复主题
FLASH 读写的问题
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
FLASH 读写的问题
你好,我使用BF518核心板做一个图像处理的模块,已经调通。测试我是用的ADEZICE将编译好的程序烧写进SPIFLASH中。
有一个问题请教各位。描述如下:
我通过UART DMA从PC端读入几个固定的表格数据,想将这些表格数据存放到FLASH中,实际使用该芯片做测量时直接从FLASH中实时读取表格进行计算。

我理解的是使用SPI接口将表格数据写入到SPIFLASH中,实际测量时再实时读取出来,也就是SPI接口与M25P16 flash实时通信。但不知道该怎么做,麻烦可以讲明白一下,有没有可以参考的驱动或代码?新手求教,谢谢!


^_^
等级:论坛新手 参考IP地址:*.*.*.*
2015/4/29 10:17:04
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
顶一下

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2015/5/3 21:51:48
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

已经调通,使用了visual dsp中的例程代码,可以写入和读出了。谢谢。


^_^
等级:论坛新手 参考IP地址:*.*.*.*
2015/5/6 10:41:43
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你好,再请教两个关于flash的问题。

使用测试代码可以调通M25P16与BF518的写入和读出,是写入几个字节之后再读出打印,是正确的。

现在我是给flash中的第31 sector写入14688个字节,按照例程中函数的类型为unsigned short,即我要写入7344个unsigned short类型,写入后返回值是对的,但是无法读出,会卡在Result = m25p16_Control(CNTRL_GET_CODES, &pCmdBuffer);中。

D:\visual dsp++ 5.0\Blackfin\Examples\ADSP-BF518F EZ-Board\Power_On_Self_Test

我看M25P16 datasheet中,一个sector是64KB,我写入的也没有溢出,不知道为什么?


另,ADEZICE下载程序时擦除的是整个flash吗?如果我要写入一组数据固化在flash中,下次更新程序时会将它擦除掉吗?或者我在哪里可以设置ldr文件写入的地址以及部分擦除。

希望可以回答我的问题,多谢~


^_^
等级:论坛新手 参考IP地址:*.*.*.*
2015/5/11 11:51:06
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
我先回答EZICE的问题,AD-EZICE确实是下载程序的时候先擦除整个flash,你想要的恐怕的用AD-HP510ICE仿真器来实现了。

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2015/5/11 12:48:42
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

好的,我知道了,谢谢OP~

还有第一个问题,也麻烦哪位可以解答下,多谢


^_^
等级:论坛新手 参考IP地址:*.*.*.*
2015/5/11 16:31:24
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

不好意思,我们没有跑过官方的这个代码。所以不知。

你可以尝试写入没有溢出的数据,看是否能读到正确的值。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2015/5/17 23:46:02
unconscious(论坛新手)
unconscious
头衔:社区公民
帮派:无帮无派
帖数:67
金钱:746
积分:86
注册时间:2013/8/2
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

谢谢andy。我写入几个字节测试都是ok的。

请问有没有读写BF518核心板上的外部flash的例程?


**************************************************************

flash已经解决了,原来SPI_TDBR寄存器为16位,FLASH接收8位,所以每次需要将一个字节的数据表示成两个字节,才能使用例程里的写入函数,FLASH接收到的也即为一个字节。


另一个问题:DMA-UART的写入问题,因为我发送的数据有好几组,都不一样长,我想每次PC端发送一个字节就进一次中断,中断次数加加,然后在中断里判断接收到数据的结束符,即可知道为哪一组数据。

但不知道应该如何配置?是否要用2维DMA?期待回复,谢谢!




「该帖子被 unconscious 在 2015-05-25 15:04:47 编辑过」

^_^
等级:论坛新手 参考IP地址:*.*.*.*
2015/5/21 11:34:39
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

如果一次接受一个字节就进中断,没有必要用DMA。直接打开UART中断即可,UART中断的特性就是一个字节进一次中断。在中断里面设置一个查询接收FIFO的标志位判断,如果FIFO有数据,持续读,直到没有再跳出中断即可。

如果使用DMA,需要把DMA每次接收的数据长度设置为1,   用8bit模式,这样每一个数据就会进DMA中断,若下次还要接收,需要使能DMA。

建议不用DMA实现,会方便点。



我们没有518上读SPIflash 的代码。



这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2015/5/25 23:03:24
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159160 Call, 1 Queries, Processed in 0.032227 second(s),