chengying 发表于 2014-2-10 19:27:47

芯唐n3292 flash片选疑问

本帖最后由 chengying 于 2014-2-10 19:32 编辑

n3292 的demo板关于spi flash设计原理图如下,u6和和u7是共用片选,用spi 0,看底层flash驱动,片选是固定?里边有outpw(REG_SPI0_SSR, inpw(REG_SPI0_SSR) | 0x01);        // CS0,为何不用gpio_setportval()函数控制cs0?是为了操作cs0速度快?还是flash的cs0是固定,必须这样控制,我换其他io口控制片选不行吗?
因为spi 1的flash片选是被摄像头数据位占掉了。我系统打算挂一个u6放应用程序,一个u7保存用户数据。若u6和u7不能同时挂总线上,那我设计u7这个flash不是要用spi 1?
我理解应该是u6和u7可以通过不同的片选来共用spi总线。只是芯唐提供的驱动写把片选写死?
非常抓狂,芯唐的驱动能不能多加点注释,资料能不能全点,现在没看一点程序都要打好几个疑问?
INT spiFlashWrite(UINT32 addr, UINT32 len, UINT8 *buf)
{
        int volatile count=0, page, i, j;
        UINT8 data;
        PUINT8 ptr;
        PUINT32 p32tmp;

        p32tmp = (PUINT32)buf;

        usiStatusWrite1(0x00, 0x00);        // clear block protect , disable QE

        usiStatusRead(0x35, &data);
        sysprintf("SpiFlash Register-2 Status 0x%x \n", data);

        count = len / 256;
        if ((len % 256) != 0)
                count++;

        for (i=0; i<count; i++)
        {
                // check data len
                if (len >= 256)
                {
                        page = 256;
                        len = len - 256;
                }
                else
                        page = len;

                usiWriteEnable();

                outpw(REG_SPI0_SSR, inpw(REG_SPI0_SSR) | 0x01);        // CS0

                // write command
                outpw(REG_SPI0_TX0, 0x02);
                spiTxLen(0, 0, 8);
                spiActive(0);

                // address
                outpw(REG_SPI0_TX0, addr+i*256);
                spiTxLen(0, 0, 24);
                spiActive(0);

                spiSetByteEndin(0, eDRVSPI_ENABLE);

                // write data
                while (page > 0)
                {                       
                        spiTxLen(0, 0, 32);
                        outpw(REG_SPI0_TX0, *p32tmp);                       
                        spiActive(0);
                        p32tmp++;                       
                        page -=4;

                        if(page < 4)
                        {
                                if(page > 0)
                                {
                                        spiSetByteEndin(0, eDRVSPI_DISABLE);
                                        ptr = (PUINT8)p32tmp;       
                                       
                                        for (j=0; j<(page %4); j++)
                                        {
                                                spiTxLen(0, 0, 8);
                                                outpw(REG_SPI0_TX0, *ptr);                                               
                                                spiActive(0);
                                                ptr++;                       
                                                page -=1;
                                        }
                                }
                        }
                       
                }

                outpw(REG_SPI0_SSR, inpw(REG_SPI0_SSR) & 0xfe);        // CS0

                spiSetByteEndin(0, eDRVSPI_DISABLE);

                // check status
                usiCheckBusy();
        }

        return Successful;
}

again 发表于 2014-2-10 19:43:00

原参考设计是选一个封装

nongxiaoming 发表于 2014-2-10 19:43:06

这两个芯片是都焊接吗?不是选择焊接一个吗?两个都是W25XXX的,就是封装不一样而已,估计是大容量和小容量封装。

chengying 发表于 2014-2-11 08:23:42

是不同封装,只焊一个,仔细看了驱动,应该是可以同时有,片选分开。那驱动一开始很让人误解
页: [1]
查看完整版本: 芯唐n3292 flash片选疑问