SC16IS750芯片SPI转串口
SC16IS750芯片SPI转串口
- 开发中遇到的问题
- 背景
- 问题一:spi配置SC16串口相关寄存器一直不生效。
- 问题二:读寄存器一直无数据
- 整理
- 串口配置代码
- xxx.h文件
- nrf51822 spi配置参数
开发中遇到的问题
背景
手上的一个项目,由于芯片少一路串口,所以使用spi转,小批量的一个临时方案,如果正式方案个人不建议这样使用。
问题一:spi配置SC16串口相关寄存器一直不生效。
现象:发送什么数据无响应,读寄存器无响应。
原因:该芯片针对每个寄存器的读写都必须单独设置片选,也就是先拉低片选->操作寄存器->拉高片选->操作下一个寄存器。千万不可以拉低片选后操作多个寄存器。
建议代码如下:
void sc16_spi_write_reg(uint8_t reg, uint8_t value)
{sc16_spi_start();spi_send_byte(reg << 3);spi_send_byte(value);sc16_spi_stop();
}
问题二:读寄存器一直无数据
现象:对任何寄存器去读都无数据返回。
原因:针对该芯片,读寄存器前必须先写寄存器,写完再对该寄存器读0xFF。建议如下实现。
void sc16_spi_read_reg(uint8_t reg, uint8_t *regvalue)
{sc16_spi_start();reg = (reg << 3);reg = (reg | 0x80);spi_send_byte(reg);*regvalue = spi_receive_byte(0xff);sc16_spi_stop();
}
整理
上面两个问题通过datasheet没有找到原因,苦恼了很久,手册写的不清楚。
串口配置代码
void sc16_spi_set(void)
{// 做一个复位nrf_gpio_pin_clear(SC16_SPI_RESET_PIN);nrf_delay_ms(10);nrf_gpio_pin_set(SC16_SPI_RESET_PIN);nrf_delay_ms(10);sc16_spi_write_reg(DLL, 0x08); // 115200sc16_spi_write_reg(DLH, 0x00);sc16_spi_write_reg(LCR, 0xBF);// access EFR register --sc16_spi_write_reg(EFR, 0X10);// enable enhanced registers--sc16_spi_write_reg(MCR, 0x04);//--sc16_spi_write_reg(TLR, 0X00);//--sc16_spi_write_reg(TCR, 0X04);//--sc16_spi_write_reg(LCR, 0x03); // 8 bit,no parity,1 stop bitssc16_spi_write_reg(FCR, 0x06); // enable ,reset FIFOsc16_spi_write_reg(FCR, 0x01); // enable ,FIFOssc16_spi_write_reg(IER, 0x01); // en int
}
xxx.h文件
#define RHR 0x00
#define THR 0x00#define IER 0x01#define FCR 0x02
#define IIR 0x02#define LCR 0x03
#define MCR 0x04
#define LSR 0x05#define MSR 0x06
#define SPR 0x07
#define TCR 0x06
#define TLR 0x07#define TXLVL 0x08
#define RXLVL 0x09#define IODir 0x0A
#define IOState 0x0B
#define IOIntEna 0x0C
#define IOControl 0x0E#define EFCR 0x0F//-------------------------
//Special register set
//-------------------------
#define DLL 0x00
#define DLH 0x01//-------------------------
//Enhanced register set
//-------------------------
#define EFR 0x02
#define Xon1 0x04
#define Xon2 0x05
#define Xoff1 0x06
#define Xoff2 0x07void sc16_spi_write_data(uint8_t *data, uint8_t len);void sc16_spi_init(void);
void sc16_spi_uninit(void);
void sc16_spi_set(void);
nrf51822 spi配置参数
#define NRF_DRV_SPI_DEFAULT_CONFIG \
{ \.sck_pin = NRF_DRV_SPI_PIN_NOT_USED, \.mosi_pin = NRF_DRV_SPI_PIN_NOT_USED, \.miso_pin = NRF_DRV_SPI_PIN_NOT_USED, \.ss_pin = NRF_DRV_SPI_PIN_NOT_USED, \.irq_priority = SPI_DEFAULT_CONFIG_IRQ_PRIORITY, \.orc = 0xFF, \.frequency = NRF_DRV_SPI_FREQ_4M, \.mode = NRF_DRV_SPI_MODE_0, \.bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST, \
}
SC16IS750芯片SPI转串口相关推荐
- 一个 SPI 转串口驱动的优化
rel="File-List" href="file:///C:%5CDOCUME%7E1%5Czjujoe%5CLOCALS%7E1%5CTemp%5Cmsohtml1 ...
- imx6 通过移植XRM117x(SPI转串口)对Linux中的SPI驱动框架进行分析
最近分析了一下Linux 中的SPI驱动框架,将自己的理解总结一下,不足之处还请斧正! 1.SPI通信基础知识 SPI(Serial Peripheral Interface)是一种串行(一次发送1b ...
- spi转串口 linux驱动,RT_Thread WK2124 SPI转串口芯片驱动软件包
WK2124 软件包 1 介绍 WK2124 软件包是为WK2124 SPI转四串口扩展芯片而开发的RT-Thread驱动包.通过RT-Thread SPI 设备和RT-Thread UART 设备驱 ...
- STM32F0系列芯片SPI发送一字节数据却输出16个CLK时钟的解决办法
问题 上一个项目在用寄存器操作STM32F0芯片的SPI_DR寄存器的时候,发现一个问题: 我给DR寄存器赋值一个uint8_t一字节大小的数据,SPI引脚能正确输出数据和时钟,但前面八位正确的数据输 ...
- 海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022 SPI 控制器)
目录 前言: 第一部分: 第二部分: 第三部分: 第四部分: 前言: 我在某个海思主控的项目中需要使用SPI接口来驱动一块液晶屏,液晶屏主控为 st7789,分辨率 240x240,图像格式 RGB5 ...
- linux3.10系统下CH432T(SPI转串口)调试笔记
目录 1 CH432T 芯片的 SPI 通讯协议 1.1 SPI 时钟相位模式和片选 1.2 SPI 通讯协议 2 CH432 关键寄存器表 3 通讯时发生数据丢失 3.1 ch432手册分析 3.2 ...
- TI C2000系列 280049芯片SPI初始化需要注意的问题
280049芯片使用TI的库函数的时候,SPIA初始化之后寄存器设置没有改变,全为0,这个时候需要去使能SPIA或者SPIB,就是这个问题困扰了我很久,最后对比两个工程,发现 SysCtl_enabl ...
- STM32_SPI通信_与传感器芯片通信的SPI优化之路
先讲个题外话,仅用于笔记,可跳过,问题:系统断电复位,方位轴ICM-26090芯片的数据常出现无法读取传感器数据或读取到的传感器数据错误异常的情况.乱试找到了一个解决办法:在初始化拉高片选信号线的时候 ...
- ESP32-S2上使用SPI接口芯片DM9051NP转以太网的无线物联网网关开发指导
前言 DM9051NP芯片 SPI接口占用管脚数量比以太网PHY的RMII/MII少,PCBA版线布局可更精简.而DM9051NP驱动软件方面,由于源代码已集成在ESP IDF中,可见其可靠度以及网口 ...
最新文章
- Android 中的安全机制
- 安装vue脚手架创建项目
- 【职场】什么是 “职场PUA” ?
- JVM性能调优实践:G1 垃圾收集器介绍篇
- OpenAI API 案例
- 全面|机房精密空调设计,看完你就明白了
- 计算机二级access无忧考吧破解,无忧考吧access模拟考试软件
- ps 计算机 性能设置,Photoshop 中的性能首选项
- CF 592D(Super M-虚树直径)
- VS2010旗舰版如何显示行号
- x64dbg 修改为dll_X64Dbg使用教程
- 机器学习是什么?详解机器学习概念
- 想要搭建自己的云主机可以怎么做
- 怎么在Vc中打开MySQL数据库_在vc++中使用mysql数据库_MySQL
- Ubuntu SDK 安装
- 实验八:无线城域网ViMax仿真实验
- 联发科6758_联发科MT6758
- Yii2的Gii应用
- 关于pppd移植和3g功能
- Final Report
热门文章
- 使用python输出1~100之间的质数
- linux 查看系统变量
- 测试开发工作者日记:2020.10.19
- RBP的参数配置文件reportConfig.xml介绍
- 实验教学管理系统java源代码_基于jsp的实验教学管理系统-JavaEE实现实验教学管理系统 - java项目源码...
- Github中Octotastic day的含义
- JavaScript 对象扁平化
- 【游戏测试】用 python 写个自动拉取手机或模拟器游戏 log 到本地的工具
- mybatisplus代码生成报错:Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/velocity
- Python递归函数的使用