SC16IS750芯片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);