首页 > 系统相关 >CH9434-MCU代码移植,芯片使用详细说明(附Linux开发资料链接)

CH9434-MCU代码移植,芯片使用详细说明(附Linux开发资料链接)

时间:2022-12-29 16:35:59浏览次数:64  
标签:CH9434 芯片 代码 Linux 功能测试 串口 MCU

简介

CH9434是一款SPI转四串口转接芯片,提供四组全双工的9线异步串口,用于单片机/嵌入式/安卓系统扩展异步串口。提供25路GPIO,以及支持RS485收发控制引脚TNOW。本篇基于STM32F103,介绍CH9434在MCU平台移植和使用方法。

Linux移植说明可以跳转到这个链接:https://blog.csdn.net/WCH_TechGroup/article/details/128288016

本次移植的最终代码工程可以去个人Gitee下载:https://gitee.com/maji19971221/wch_-per#202214

CH9434EVT下载链接:https://www.wch.cn/downloads/CH9434EVT_ZIP.html

移植说明

1. 找一个最简单的MCU的SPI代码。

2. 去WCH官网下载CH9434EVT.ZIP,找到里面MCU的驱动代码。CH9434.c和CH9434.h复制到工程里面。

3. 因为不同MCU,SPI的首发,以及自己写的CS的拉高拉低和CH9434.c有区别。把里面的CH9434_SPI_SCS_OP;CH9434_SPI_WRITE_BYTE函数改为自己MCU的写法或者把自己的代码在外面封一层函数就行了。我这边选择再封了一层函数,不去修改驱动文件。

4. 接下来需要判断主控和CH9434之间是否保持一个正常的接口通讯。芯片这里预留了一个用户自定义寄存器(SCR寄存器),可以通过往这个寄存器写入随机值再读出,看读出值是否为刚刚写入的值,如果不是那就是接口通讯异常,问题有以下几个可能:

a)      CH9434的硬件存在问题。硬件问题判断方向比较多。可以通过看芯片的VCORE(33)脚的电压(1.05V-1.1V),以及外部32M晶振是否振荡做一个基础的判断。常见的一些硬件设计问题包括:1. CH9434的3个VDD脚没有外部短接,这个是在硬件设计时比较容易犯的错误,芯片的3个VDD(1,2,35)脚如果没外部短接,芯片无法正常工作。2. PCB封装画错,沁恒目前只提供AD的元器件封装库,对于使用Candence等EDA工具的需要自己建立元器件库,而CH9434A的封装并不是每边引脚数量一致,这个就会导致部分PCB工程师在绘制时出错。

b)      软件时序问题。CH9434A的时序图如下(使用DsView抓包获得)。可以看到,CH9434的正常通讯时序是在一个CS低电平里面有两个字节的数据(命令+数据),并且命令和数据之间要保持至少3us的间隔。没有按照这个要求,芯片可能就无法正常识别主机发过来的数据,从而通讯失败。

5. 程序添加SCR读写操作代码,判断接口通讯是否正常。

正常的话读取数据就是0x55,通讯异常就是其它数据。这样和9434最基础的通讯代码就已经完成了。

功能测试

 

串口功能测试

首先需要初始化时钟和串口,初始化的代码,可以参考EVT中的main函数。因为都已经封装好了函数,用户实际只需要调用库函数,给入对应的实参即可。这边拿其中的串口0(0-3)举例。CH9434的4个串口都是独立的,每个串口的寄存器都有独立的寄存器地址,所以需要根据自己实际需要使用几个串口去做对应的初始化设置。芯片本身的串口是TTL,但是也支持流控和485Tnow的使能控制,如果需要使用只需要将代码这边对应的宏定义打开即可。

通过EXIT_INT宏定义选择使用while(1)查询方式还是使用INT外部中断的方式去做。需要注意的是,CH9434的中断方式是低电平触发,目前部分MCU仅支持下降沿触发,此时就需要在外部中断服务函数里面加上INT引脚判断,直到INT变高才退出外部中断服务函数。

将CH9434EVT里面的main函数处理复制到自己的工程。这里的代码做的功能就是回传(收到什么回传什么)。整个代码的处理流程逻辑如下:

最终实现的效果就是串口收到什么就回传什么数据。

RS485功能测试

评估版通过跳帽将芯片的串口链接到485芯片。程序方面只需要打开RS485宏定义。

和TTL的初始化代码区别就是多了一个RS485 TNOW使能的初始化,读写的程序流程和前面的TTL保持一致。

 

最终实测效果也是一样,实现的效果就是串口收到什么就回传什么数据。

Modem流控功能测试

程序中将开启流控的宏定义打开。和TTL的初始化代码区别就是多了一步流控的使能以及RTS和DTR引脚的电平状态设置,读写的程序流程和前面的TTL保持一致。

打开串口工具的RTS使能,即可实现正常的数据收发。

GPIO功能测试

将GPIO_Test宏定义打开,本次代码是将GPIO0-12作为推挽输出,GPIO13-25作为上拉输入读取电平状态。

程序下载,如图,随机拿GPIO10链接一个LED灯。实现闪烁效果。

随机将GPIO19接地,程序打印正常读取。

标签:CH9434,芯片,代码,Linux,功能测试,串口,MCU
From: https://www.cnblogs.com/mj19971221/p/17012856.html

相关文章

  • Linux 的 top 命令平均负载
    每次发现系统变慢时,我们通常做的第一件事就是使用​​uptime​​​或​​top​​命令查看系统的“平均负载”[root@rocketmq-n2~]#uptime11:33:53up2:18,2user......
  • Linux常用操作
    1、linux环境变量​​参考:Linux下设置和查看环境变量​​(1)、在/etc/profile文件中添加变量,对所有用户生效(永久的)(2)、在用户目录下的.bash_profile文件中增加变量【对单一用......
  • Linux 输出日期时间
    年月日echo$(date+%F) //2020-12-30echo$(date+%Y/%m/%d) //2020/12/30;%Y:年|%m:月|%d:日时分echo$(date+%R) //10:00时分秒echo$(date+%T) ......
  • linux Makefile 如何将生成的 .o 文件放到指定文件夹
    一、Makefile文件为了方便分析,直接上文件,Makefile文件中的内容如下所示:##Makefile#编译的.o文件和.c文件在同一路径下#$(info"start...")#可执行文件名PROJE......
  • Arch Linux配置Java学习环境
    1.JDKJDK8:主流版本$sudopacman-Sjdk8-openjdkJDK11:将会是下一个主流版本$sudopacman-Sjdk11-openjdkJDK19:最新版$sudopacman-Sjdk19-openjdk......
  • Linux: root 密码破解步骤
    在以下界面进入root密码破解界面mount-orw,remount/sysrootchroot/sysrootecho123|passwd--stdinroottouch/.autorelabelexitexit......
  • Linux中的特殊符号含义及作用!
    我们在学习、使用Linux时,会遇到各种各样的符号,很难理解和记忆,但其实符号的作用很大,今天老男孩教育小编给大家详细说明一下:1、通配符?匹配单个字符*代表所......
  • Linux 常用监控指标总结
    1.Linux运维基础采集项做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑。所以,依靠强大的监控系统,收集尽可能多的指标,意义重大。但哪些指标才是有意义的呢,本着从实践中来......
  • Linux内存管理-slub算法
    Slub简介Linux内核内存管理用了两个算法:伙伴算法(以页为单位的大内存)和slub算法(以字节为单位的小内存),其中slub系统运行在伙伴系统之上。slub进行内存分组管理,分......
  • linux bpf 学习记录
    eBPF介绍BPF(BerkeleyPacketFilter)使普通用户拥有了让啮合执行用户代码并共享数据的能力。用户可以讲eBPF指令直接码传输给内核,然后通过socket写时间来触发内核执......