一段时间芯慌后国外芯片价格飙升,国内芯片厂突然崛起;乘此机会使用了该芯片做了一批产品,经过一段时间测试芯片稳定性还可以,工作在电磁环境较差的电源监控中没有出现复位死机现象。

关于该国产芯片资料实在是很少,官方对该芯片的pdf 寄存器描述非常简单;

SPI从机驱动程序:

void slave_spiInit(void)
{__HAL_RCC_SPI_CLK_ENABLE();// enable SPI clk// SPI GPIO MAP ...__HAL_AFIO_REMAP_SPI_CS(GPIOB,GPIO_PIN_4);//NSS__HAL_AFIO_REMAP_SPI_CLK(GPIOB,GPIO_PIN_24);//SCLK__HAL_AFIO_REMAP_SPI_MOSI(GPIOB,GPIO_PIN_26);//MOSI__HAL_AFIO_REMAP_SPI_MISO(GPIOB,GPIO_PIN_25);//MISOWRITE_REG(SPI->CH_CFG,(1<<22));// clear fifo WRITE_REG(SPI->SPI_CFG,((1<<16)|//1’b1 spi输出一直有驱动,即使没有数据传输(1<<1)|//1’b1:传输模式 B(1<<0)));//1’b1 SCK IDLE 时为 1//补上:WRITE_REG(SPI->CH_CFG,(SPI_CH_CFG_RXON | SPI_CH_CFG_TXON)); // enable spi
}void slave_Send(uint32_t *dat, int len)
{while(len--){while((READ_REG(SPI->STATUS) & 0x3F)>=32){;}// WRITE_REG(SPI->TXDATA, (uint32_t)*dat++);}
}int slave_Recv(uint32_t *dat,int len)
{uint32_t rxfifo_count =READ_REG(SPI->STATUS);rxfifo_count =(rxfifo_count>>6)&0x3f;rxfifo_count>>=2;if(rxfifo_count>=len){for(int i=0;i<rxfifo_count;i++){*dat++=SPI->RXDATA;}}
return rxfifo_count;
}void main(void)
{int fifolen =0;uint8_t fifoDat[32]={0};slave_spiInit();do{fifolen =slave_Recv((uint32_t*)fifoDat,3);// SPI 收发必须是32 bit !if(fifolen>=3){//3*4byte =12 Byteslave_Send((uint32_t*)fifoDat,3);}}while(1);
}

SPI主机驱动程序:

void master_spiInit(void)
{__HAL_RCC_SPI_CLK_ENABLE();// enable SPI clk// SPI GPIO MAP ...__HAL_AFIO_REMAP_SPI_CS(GPIOB,GPIO_PIN_4);//NSS__HAL_AFIO_REMAP_SPI_CLK(GPIOB,GPIO_PIN_24);//SCLK__HAL_AFIO_REMAP_SPI_MOSI(GPIOB,GPIO_PIN_26);//MOSI__HAL_AFIO_REMAP_SPI_MISO(GPIOB,GPIO_PIN_25);//MISOSPI->CH_CFG=(1<<22);// clear fifo SPI->SPI_CFG =(1<<2);//master styleuint32_t div =40000000/(900000*2) - 1;//SPI =900KhzSPI->CLK_CFG =div;//设置SPI输出时钟SPI->CH_CFG|=(SPI_CH_CFG_RXON | SPI_CH_CFG_TXON); // enable spi
}//返回接收长度
int master_SendRecv(uint8_t *rev ,uint8_t *snd ,uint16_t tlen)
{uint32_t* snd32  ,*rev32 =(uint32_t*)rev;uint32_t tx_rx_bitlen,clen=tlen ,rlen=tlen;snd32 =(uint32_t*)snd;uint16_t fifo_tfree;SPI->CH_CFG|=(1<<22);// clear fifo do{//step 1 ,确定时钟个数if(tlen>1020){clen =1020;tlen-=1020;}else{clen=tlen;tlen =0;}tx_rx_bitlen =SPI->CH_CFG;tx_rx_bitlen&=~((uint32_t)0xffff<<3);tx_rx_bitlen|=(clen*8)<<3;SPI->CH_CFG=tx_rx_bitlen ;//step 2 ,写入数据到SPISPI->CH_CFG|=(1<<0);//启动SPido{//step 3 ,写入数据到SPIfifo_tfree =(32-(SPI->STATUS& 0x3f))/4;//确定fifo 大小while(fifo_tfree&&clen){SPI->TXDATA = *snd32++;clen =(clen>4)?clen-4:0;fifo_tfree--;}//step 4 ,等待SPI空闲while(SPI->STATUS&(1<<12)){;}//step 5 ,接收数据  fifo_tfree =((SPI->STATUS>>6)&0x3f)/4;while(fifo_tfree--){*rev32++ = SPI->RXDATA;}}while(clen>0);}while(tlen>0);//step 6 ,接收残余数据if(rev32!=NULL&&(rlen&0x3)){//未满4byte*rev32++ = SPI->RXDATA;}
return rlen;
}int main(void)
{uint8_t txbuf[1024],rxbuf[1024];master_spiInit();do{master_SendRecv(rxbuf,txbuf,25);}while(1);
}

SPI主机驱动波形:

国产W806 SPI主机/从机驱动程序相关推荐

  1. 【GD32】从0开始学GD32单片机(9)—— SPI外设详解+主机从机发送和接收例程

    目录 简介 片选线 时序 运行模式 基本发送和技术流程 主机发送 主机接收 从机发送 从机接收 例程 主机和从机全双工通信 简介 SPI是串行外设接口(Serial Peripheral Interf ...

  2. ESP32学习笔记(19)——SPI(主机)接口使用

    一.SPI简介 SPI(Serial Peripheral Interface) 协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线.它被广泛地使用在 ADC.LCD ...

  3. ESP32S3系列--SPI主机驱动详解(一)

    一.目的 SPI是一种串行同步接口,可用于与外围设备进行通信. ESP32S3自带4个SPI控制器外设(Master),其中SPI0/SPI1内部专用,共用一组信号线,通过一个仲裁器访问外部Flash ...

  4. Verilog实现SPI主机通信

    前言 在今年二月份的时候我写了一篇关于SPI模式的Verilog代码实现的博客(原文 ),当时由于时间关系,我只测试了SPI的一种通信模式(CPOL = 0, CPHA = 0),在该模式下通信正常, ...

  5. stm32f103 spi slave从机模式miso需要上拉

    stm32f103t8u6 spi slave从机模式 miso管脚需要上拉电阻!! 测试了20K阻值的无效,2K有效!

  6. K8s Mysql 一主多从 主机宕机的解决方法

    利用K8s官方方案(Stateful)实现 Mysql 一主多从和读写分离.但是如果Mysql的主机宕机,K8s是不会自动将Pod漂移的,我是将宕机的那台 Node 从k8s的集群中删掉,解决了此问题 ...

  7. redis的读写分离和主机宕机

    主写从读,读写分离 主:只允许写操作 从:只允许读操作 主机宕机,从机原地待命 主机宕机后,他的从机的状态会变成未启用,因为它要等他的老大,也就是主机正常运行后,它才工作 模拟一下 关闭主机的服务 r ...

  8. mysql主从复制及主机宕机的解决方法

    mysql主从复制及主机宕机的解决方法 文章目录 mysql主从复制及主机宕机的解决方法 概念 为什么需要主从复制 主从复制原理 主从搭建 删除mysql 开始搭建 Mysql主机宕机的解决方法 本篇 ...

  9. 将虚拟机网络适配器改为仅主机模式,Vmware弹出“仅主机模式适配器驱动程序似乎未运行”

    打算将Win7虚拟机和防火墙m0n0wall连接在同一个专用网络中,老师要求同一设成仅主机模式,配置防火墙和虚拟机都遇到了一个问题,就是不能连接网络适配器,只要手动连接就会出现弹窗: 仅主机模式适配器 ...

最新文章

  1. 拥抱Node.js 8.0,N-API入门极简例子
  2. mysql分页案例_php+mysql 进行分页案例
  3. UMDF驱动开发入门
  4. iis php cgi.exe 漏洞,IIS4\IIS5 CGI环境块伪造0day漏洞
  5. spyder编辑器报ModuleNotFoundError: No module named ‘pymongo‘,明明已经安装上了pymongo扩展
  6. Java实现两个csv文件的对比_Java实现CSV文件差异对比
  7. 1061. Dating (20)-PAT甲级真题
  8. mipi差分信号原理
  9. 程序员的相亲那件小事,指南献给您
  10. 镜像电流源特点_电流源传奇——镜之分身
  11. 腾讯这几年成果还真不少!抢了不少群众资源。。。
  12. ie 验证码图片不显示解决
  13. CocosCreator之字体资源
  14. 快速删除node_modules(rimraf)
  15. 2020-12-2 IDEA2020.2 提示Typo:In word ‘XXXX’ 解决方法
  16. LeetCode——11. 盛最多水的容器
  17. Storm部分:Storm Grouping -- 数据流分组(各种数据分发策略的练习)【Java版纯代码】
  18. elixir添加erlang模块
  19. RS232转PROFIBUS DP总线桥使用方法远创智控
  20. 【python】 pypinyin 拼音库

热门文章

  1. 云联惠情况说明_经济状况良好时,云仍然有意义吗?
  2. 【状压DP】哈密顿回路问题
  3. graham扫描法求凸包
  4. 智能扫地机器人软硬件开发笔记(1)-规格需求书
  5. 将Excel与Python完美组合的神器
  6. Matlab如何安装k-Wave
  7. 2020-2021,从百度AI原生云升级看产业智能化新趋势
  8. 摄像头动态捕捉小程序
  9. ui和ue的区别是什么?其发展趋势如何?-庞姿姿
  10. 如何让异地电脑之间访问共享文件夹