历史上的今天
返回首页

历史上的今天

今天是:2025年04月11日(星期五)

正在发生

2019年04月11日 | 模拟SPI实现和调试流程

2019-04-11 来源:eefocus

一般来说,所有的spi通信设备都可以使用模拟spi来实现,而且模拟spi的好处就是不需要针对每一款mcu去重新熟悉其spi控制器的配置,只要简单配置一下spi_clk、spi_cs、spi_mosi、spi_miso四个引脚的输入输出即可,具有很好的可移植性。


下面我以stm32为例,简单讲解一下模拟spi的实现和调试流程,实例中spi以上升沿来进行收发数据


1、首先先贴出代码


    //初始化spi_clk、spi_cs、spi_mosi、spi_miso四个io

    //spi_cs

    GPIO_Initure.Pin=SIMULATE_SPI_CS_PIN; //PC10

    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出

    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉

    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速

    HAL_GPIO_Init(GPIOC,&GPIO_Initure);     //初始化


    //spi_clk

     GPIO_Initure.Pin=SIMULATE_SPI_CLK_PIN; //PC11 

    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出

    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉

    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速

    HAL_GPIO_Init(GPIOC,&GPIO_Initure);     //初始化


    //spi_miso 

    GPIO_Initure.Pin=SIMULATE_SPI_MISO_PIN; //PC112

    GPIO_Initure.Mode=GPIO_MODE_INPUT;  

    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速

    HAL_GPIO_Init(GPIOC,&GPIO_Initure);     //初始化


    //spi_mosi

    GPIO_Initure.Pin=SIMULATE_SPI_MOSI_PIN; //PC113

    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出

    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速

    HAL_GPIO_Init(GPIOC,&GPIO_Initure);     //初始化 


void simulate_spi_write_byte(u8 data)

{

    u8 kk;


    SIMULATE_SPI_CS = 0;


    SIMULATE_SPI_CLK = 0;

    SIMULATE_DELAY_US;     //读取第一bit数据 等待数据稳定 根据实际时钟调整


    //大概的spi时钟为1/2us=500KHZ   左右

    for(kk=0;kk<8;kk++)

    {

     //高位在前发送方式    根据升级器件特性定

    if((data&0x80)==0x80) SIMULATE_SPI_MOSI = 1;

    else         SIMULATE_SPI__MOSI = 0;

    SIMULATE_DELAY_US;      //等待数据稳定  根据实际时钟调整

    SIMULATE_SPI_CLK = 1;//上升沿发送数据

    SIMULATE_DELAY_US;//CLK高电平保持一段时间 这个可以不需要 根据具体的spi时钟来确定

    SIMULATE_SPI_CLK = 0; //把时钟拉低实现为下一次上升沿发送数据做准备

    data = data<<1;//发送数据的位向前移动一位

    }


    SIMULATE_SPI_CS = 1;

}


u8 simulate_spi_read_byte(void)

{

    u8 kk=0, ret=0;


    SIMULATE_SPI_CS = 0;


    SIMULATE_SPI_CLK = 0;

    SIMULATE_DELAY_US;//读取第一bit数据 等待数据稳定 根据实际时钟调整


    //大概的spi时钟为1/2us=500KHZ   左右

    for(kk=0;kk<8;kk++)

    {

    ret = ret<<1; //读的时候 高位在前   根据升级器件特性定

    SIMULATE_SPI_CLK = 1; //上升沿读取数据

    if(SIMULATE_MISO) ret |= 0x01;

    SIMULATE_DELAY_US;//根据实际时钟调整,可以不添加

    SIMULATE_SPI_CLK = 0;//标识数据接收完毕

    SIMULATE_DELAY_US; //等待数据稳定  根据实际时钟调整

    }


    SIMULATE_SPI_CS = 1;


    return ret;

}

2、SPI调试的注意点 

1)spi读取和发送数据前,等待数据稳定的延时是有必要添加的,否则,存在时钟在跳变的同时,数据也在跳变的情况,这个时候读回来的数据有可能不准确,可能是0或1。


2)根据器件的特性说明,设置读取的方式,高位在前还是低位在前,当然有些器件会在读取或者写入数据的时候,有些特殊的时序要求,这个就另作说法了,如SSD2828器件。


3)spi是否能够正常读写器件,最好的判断方法就是读取器件的id,可以循环去读取,测试是否能够正确返回id,如果不行则需结合示波器查看波形。


4)spi器件的复位管脚也非常重要,如果复位脚一直处于复位的状态,那么这个时候也是无法正确读写器件的

推荐阅读

史海拾趣

3M公司的发展小趣事
  1. 起源和早期发展: 3M公司(Minnesota Mining and Manufacturing Company)创立于1902年,在美国明尼苏达州成立。最初,公司主要从事矿石开采和研磨业务,以及生产砂纸和磨粉。在早期几十年里,3M致力于技术创新和产品开发,包括防水砂纸、透明胶带等产品,为公司奠定了良好的发展基础。

  2. 科技创新和产品多样化: 20世纪中叶,3M公司持续推动科技创新,不断扩展产品线。其中,最著名的是1950年代推出的可粘贴便签纸(Post-it)和1960年代推出的微型胶带(Scotch-Brite),这些产品成为公司的标志性产品,极大地推动了其业务的发展。

  3. 国际化战略和全球扩张: 20世纪后半叶,3M公司加速了国际化战略,并在全球范围内扩张业务。通过收购和合作,公司进入了新的市场和领域,如医疗保健、电子、汽车、能源等。3M在全球建立了广泛的生产基地和研发中心,成为一家跨国企业。

  4. 持续创新和技术领导: 3M公司一直致力于持续创新和技术领导,投入大量资金用于研发和技术创新。公司不断推出新产品和解决方案,满足市场需求并保持竞争优势。特别是在电子领域,3M推出了许多创新产品,如电子材料、封装材料、导热材料等,为电子行业提供了关键的解决方案。

  5. 可持续发展和社会责任: 3M公司致力于可持续发展和社会责任,在全球范围内推动环保和社会公益事业。公司制定了一系列环保政策和计划,努力降低能源消耗、减少废物排放,并积极参与社区建设和公益活动,为社会做出积极贡献。

DS-IMP公司的发展小趣事

在电子行业,供应链管理是企业发展的关键因素之一。DS-IMP公司深知这一点,因此在发展过程中不断优化供应链管理。公司建立了完善的供应链体系,与供应商和客户建立了长期稳定的合作关系。同时,公司还引入了先进的供应链管理软件和技术手段,实现了对供应链的实时监控和精细化管理。这些措施不仅提高了公司的运营效率,还降低了成本风险,为公司的发展提供了有力保障。

B.B. Battery公司的发展小趣事

在国内市场取得一定成绩后,B.B. Battery公司开始积极拓展国际市场。他们参加国际电池展会,与全球知名企业建立合作关系,将产品打入国际市场。同时,公司还注重品牌建设,通过提升产品质量和服务水平,树立了良好的品牌形象。这些努力使得B.B. Battery公司的品牌在全球范围内都享有较高的知名度和美誉度。

Goldstar Electron Co Ltd公司的发展小趣事

面对日益严峻的环境问题,B.B. Battery公司积极响应国家绿色发展的号召,致力于推动绿色生产。他们引进环保型生产设备和技术,减少生产过程中的污染物排放。同时,公司还研发出多款环保型电池产品,为客户提供更加绿色、高效的能源解决方案。这些举措不仅提升了公司的社会责任感,也为公司的可持续发展奠定了坚实基础。

BOPLA公司的发展小趣事

在国内市场取得一定成绩后,BOPLA开始将目光投向海外市场。通过参加国际电子展会、与海外客户建立合作关系等方式,公司成功将产品打入国际市场。同时,BOPLA还积极调整产品策略,根据不同国家和地区的市场需求,推出定制化的电子元件产品,进一步扩大了市场份额。

Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

AE&ST公司自创立之初,就深知技术创新是电子行业的核心竞争力。公司投入大量资源进行研发,不断探索新的半导体材料和生产工艺。在一次偶然的实验中,AE&ST的研发团队发现了一种新型半导体材料,这种材料在能效和稳定性方面表现出色。公司迅速将这一发现转化为产品,并推向市场。新产品一经推出,便因其卓越的性能获得了市场的广泛认可,AE&ST公司因此获得了巨大的商业成功。

问答坊 | AI 解惑

小灵通生产持续负增长

小灵通生产持续负增长 2006-6-8   信息产业部6月6日发布了电子信息产业的最新调查,调查显示,今年1到4月份,小灵通的生产“依旧呈不断下降趋势”。尽管欲借“消化月租”进一步增强自身价格优势,但小灵通抗衡移动电话的优势正在逐步萎缩。    ...…

查看全部问答>

果汁LED灯

一 准备工作: 材料: 纸 一个LED 一个苹果或梨或其他水果(这里用的是富士苹果) 长25cm的铜线(直径1-2 mm) 长25cm的铁线(直径1-2 mm) 工具: 电烙铁 焊锡 剪刀 二 制作过程 1用剪刀把纸张剪出5片花叶形状,边缘大约长6cm, ...…

查看全部问答>

eboot, TOC,NK 地址跳转的问题

平台:S3C2440+WINCE5。0+EBOOT 问题1:在Eboot输出的调试信息中TOC的ID[1],打印出来的信息中dwLoadAddress:0x80200000 dwJumpAddress:0x8037cf88        其中dwLoadAddress是把nk.bin拷贝到RAM的虚拟地址,dwJumpAddress应 ...…

查看全部问答>

U盘刚插入电脑时,在出现盘符之前,怎样用DeviceIoControl和驱动通信?????

U盘刚插入电脑时,在出现盘符之前,怎样用DeviceIoControl和驱动通信????? DeviceIoControl的一个参数是u盘的句柄,此时没有盘符,怎样获得u盘的句柄呢??…

查看全部问答>

去上海华为搞手机终端驱动开发怎么样?

本人工作四年,前面三年多时间一直从事家电领域变频空调的产品开发,但受困于行业发展实在内耗太大,利润太薄,且开发周期过长,成就感不足.于是开始找工作,得到华为口头offer.但一等就是2月,才发正式offer.但这时已经在另外一家比较大的公司从事消费电 ...…

查看全部问答>

IC测试原理解析(一)

本系列一共四章,下面是第一部分,主要讨论芯片开发和生产过程中的IC测试基本原理, 内容覆盖了基本的测试原理,影响测试决策的基本因素以及IC测试中的常用术语。 第一章 数字集成电路测试的基本原理 器件测试的主要目的是保证器件在恶劣的 ...…

查看全部问答>

一个小项目寻找对STARM芯片熟悉的工程师

   需要制作硬件和调试,功能要求简单,类似学习板。   项目可考虑分成或者一次性支付,有意向的发信息给我。或者EMAIL:   HOLLYCAT@21CN.COM…

查看全部问答>

拿到LaunchPad了

拿到LaunchPad了,谢谢eeworld,谢谢ti。各个鞋童,准备怎么玩?…

查看全部问答>

新新手想参赛,想开始自己的电子人生,肿么办,求前辈

本帖最后由 paulhyde 于 2014-9-15 03:52 编辑 今年大一,学了点C,现在水平很一般,不过想参加省赛。。无比热情说动了两个同学。。现在准备想项目。。。智慧城市。。可是完全没感觉,求帮助,告诉我该怎么办?不是求项目,只是求指教!!!! ...…

查看全部问答>