搜索
bottom↓
回复: 4

有关PIC24系列读写SST25VF016B的问题咨询?

[复制链接]

出0入0汤圆

发表于 2014-1-3 21:34:34 | 显示全部楼层 |阅读模式
    最近在用PIC24E32EP204读写SST25VF016B的研究,发现一个问题,百思不得其解!如果有哪位正好看到此贴,也同时用过的,望不吝赐教,不甚感激!
    废话少说,转入正题如下:
    我看过SST25VF016B的资料,有两条命令读操作:03H和0BH,其中0BH的读取频率可达80MHz(有些资料说是50MHz,反正不管!),但我用IO口模拟SPI方式读SST25VF016B,感觉频率达不到50MHz,最多不过260KHz,差一大截,怎么回事?难道我的理解有错,请大家解释一下。
这里也不要怀疑我程序的正确性,很多我都是参考网站的官方资料编写的!但就是不能让频率达到50MHz!后来,我估计可能要用PIC24的芯片内部SPI模式来读取SST25VF016B,但由于这个PIC24的SPI模式没搞懂,一直没试,如果有人用过,可以回答我这个问题!
   再者,就是PIC24可以用锁相环PLL将频率倍到最大为120MHz,但我用示波器测试,好像单周期指令的执行频率也达不到120MHz,怎么回事?
   呵呵,请大家看到,帮我分析分析,先谢了!!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出400入0汤圆

发表于 2014-1-3 23:04:48 来自手机 | 显示全部楼层
模拟方式当然速度上不去了,肯定要用硬件SPI才能提高速度。我没用过PIC,后面两个不知道,多看看手册肯定能做出来的

出0入0汤圆

发表于 2014-1-23 21:23:15 | 显示全部楼层
void pic_flash_init(void)
{
        volatile CPU_INT16U regtmp;
       
        /* Config ss1 pin --- rb2 */
        TRISG &= ~((CPU_INT16U)0x1 << 9);        /* PORTG.9 set output */
        PORTG |= (CPU_INT16U)0x1 << 9;                /* invalide chip selcet */
       
        /************************************/
        regtmp = 0; /* SCK1 and SDO1 as spi function pins ,8 bits */

        regtmp &= ~((CPU_INT16U)0xf << 6);        /* SPI mode 0 */
        regtmp |= SPI_CON1_SPRE_1;
        regtmp |= SPI_CON1_PRE_1;                /* master clock = Fcy / 2 / 1 = 8M */
        regtmp |= SPI_CON1_MASTER;                /* SPI master mode */
       
        SPI2CON1 = regtmp;

        regtmp = 0;
        regtmp &= ~((CPU_INT16U)0x1 << 6);        /* Clear Receive Overflow Flag bit */
        regtmp |= (CPU_INT16U)0x1 << 15;        /* Enables module and configures SCKx, SDOx, SDIx and SSx  as serial port pins */
        SPI2STAT = regtmp;                       
}

static void _pic_flash_send_data(CPU_INT08U wdata)
{
        volatile CPU_INT16U regtmp;
       
          do
        {
                regtmp = SPI2STAT;
                regtmp &= SPI_STAT_SPITBF;
        }while(regtmp == SPI_STAT_SPITBF);        /* buffer is full */
        SPI2BUF = (CPU_INT08U)(wdata & 0xff);
       
          do
        {
                regtmp = SPI2STAT;
                regtmp &= SPI_STAT_SPIRBF;
        }while(regtmp != SPI_STAT_SPIRBF);        /* buffer is empty */        
        regtmp = SPI2BUF;               
}

static CPU_INT08U _pic_flash_read_data(void)  
{
        volatile CPU_INT16U regtmp;
       
          do
        {
                regtmp = SPI2STAT;
                regtmp &= SPI_STAT_SPITBF;
        }while(regtmp == SPI_STAT_SPITBF);        /* buffer is full */
        SPI2BUF = 0;
       
          do
        {
                regtmp = SPI2STAT;
                regtmp &= SPI_STAT_SPIRBF;
        }while(regtmp != SPI_STAT_SPIRBF);        /* buffer is empty */        
        regtmp = SPI2BUF;       
       
        return (CPU_INT08U)(regtmp & 0xff);
}


以上三个是我在protues上仿真,使用SPI控制器操作FLASH的基本接口。对于FLASH的读写操作使用上面两个读写操作按照FLASH手册组合即可。

出0入0汤圆

发表于 2014-4-16 15:16:35 | 显示全部楼层
   顶一下

出0入0汤圆

发表于 2014-4-16 22:17:08 | 显示全部楼层
指令周期是Fosc/2,120M系统时钟,指令周期16.7ns,挺快。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 20:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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