OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7139|回复: 6

关于Flash读写问题

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-7-21
在线时间
0 小时
发表于 2012-11-1 17:56:35 | 显示全部楼层 |阅读模式
我想问下使用SPI读写外部Flash是不是效率很差的,我做的点阵屏显示,字模从存储在外部Flash中,每扫描一行点阵读一次,一行的数据量很小的,可是整个屏看起来一闪一闪的,我就知道是读用了太多时间??还是别的问题,还是这种方案不可行,不知道人家做广告屏是用什么方法,有没有办法在显示的同时扫描.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-1 21:42:22 | 显示全部楼层
回复【楼主位】mimi:
---------------------------------
八成是你 的代码问题。
就字库来说,SPI FLASH不慢的...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-7-21
在线时间
0 小时
 楼主| 发表于 2012-11-1 22:20:48 | 显示全部楼层
要不我发我的程序给你看:
void rogram_Display(unsigned char program_i)  //一行数据最大32*8个字节
{
static u16 i,j,n1,n2,up_offset,left_offset,count,ccount;
u8 flag; u16 num;
SPI_Flash_Read(buff_char_parameter,0x0,256);
n_Screen_Long=buff_char_parameter[0];
n_Screen_High=buff_char_parameter[1];
n_Str_High=buff_char_parameter[2]; //取模字符串有点阵屏显示行数,字符高度
// n_Str_Long=buff_char_parameter[4];
n_NumofChar=buff_char_parameter[3];//对应n个字符对应长度放在【5~】之后的一段空间当中
   //n行字符串
m_Screen_Long_Str=(unsigned char *)malloc(n_Screen_Long*8); //开辟适合屏幕长度相适应该的长度数组
m_Char_Long=(unsigned char *)malloc(n_NumofChar);      //开辟装载字符长度标量的数组
SPI_Flash_Read(m_Char_Long,0xff,n_NumofChar);     //将字符串长度参数存放入数组中;
//比较得出一个长度最大的字符串长度
for(num=0;num<n_NumofChar-1;num++)
{
flag=(m_Char_Long[num]>m_Char_Long[num+1])?m_Char_Long[num]:m_Char_Long[num+1] ;

}
myfree(m_Flash_char_Str);
m_Flash_char_Str=(unsigned char *)malloc(flag);     //每个字符串长度单行相适应的数组大小空间    
  

while(1)
{  /*  for(unsigned char k=0;k<n_NumofChar;k++) */
  
//     m_Flash_char_Str=(unsigned char *)malloc(m_Char_Long[k]);     //每个字符串长度单行相适应的数组大小空间
//     SPI_Flash_Read(m_Flash_char_Str,512+offset_Flah_Char,m_Char_Long[k]); //512地址开始
// offset_Flah_Char+=m_Char_Long[k];

//清屏
/* for(i=0;i<32;i++)
   {
for(j=0;j<8;j++)
WriteByte(i,0xff);

Port(i);
led_LT=1;
led_LT=0;
   
   }  
*/
   frame1();  //边框

 //   m_Flash_char_Str=(unsigned char *)malloc(m_Char_Long[k]);     //每个字符串长度单行相适应的数组大小空间    
   for(n1=0;n1<32;n1++)
   {  
     SPI_Flash_Read(m_Flash_char_Str,512+offset_Flah_Char+up_offset,m_Char_Long[k]); //512地址开始+读一行数据
offset_Flah_Char+=m_Char_Long[k];
   for(n2=0;n2<n_Screen_Long*8;n2++)
   {
    
trim_function2();  //预显示一行
WriteByte(n1,m_Screen_Long_Str[ccount++]);

}
ccount=0;
count++;
if(count==n_Str_High)
{
count=0;
// m_offset++;   动态时用到
k++;if(k==n_NumofChar) k=0;   
 }

Port(n1);
led_LT=1;
led_LT=0;

 }//myfree(m_Flash_char_Str);  

   
}
}>
回复 支持 反对

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-7-21
在线时间
0 小时
 楼主| 发表于 2012-11-1 22:24:44 | 显示全部楼层


 我怎么感觉就是这里的spi_flsah_read这里出的问题,当我把这一句去掉后就不会一闪闪的了!
回复 支持 反对

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-7-21
在线时间
0 小时
 楼主| 发表于 2012-11-2 13:07:10 | 显示全部楼层
原子哥,怎么看?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-2 21:55:11 | 显示全部楼层
回复【5楼】mimi:
---------------------------------
那你看看spi_flsah_read用掉你多少时间?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
352
金钱
352
注册时间
2014-1-22
在线时间
43 小时
发表于 2014-8-26 17:07:28 | 显示全部楼层
最近在学习SPI读取数据,显示在LCD上
任何一件事情,只要心甘情愿,总是能够变得简单。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-2 05:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表