KT148A一线通讯的注意事项_以及常见的调试问题点

目录

KT148A语音芯片完整的开发资料sop8封装国产低成本_SOP8图片-智慧城市文档类资源-CSDN下载

一、简介

KT148A是受主MCU控制的,使用的是单线通讯的方式,也就是俗称串口通信,注意不是UART通信,通信的协议也是非标准的,详细的可以看看芯片说明书

二、详细说明

2.1 我们给出的参考代码

2.2 参考波形图--逻辑分析仪

2.3 关于芯片待机5秒自动进入待机

2.4 关于芯片低功耗的F0指令说明


KT148A语音芯片完整的开发资料sop8封装国产低成本_SOP8图片-智慧城市文档类资源-CSDN下载

一、简介

KT148A是受主MCU控制的,使用的是单线通讯的方式,也就是俗称串口通信,注意不是UART通信,通信的协议也是非标准的,详细的可以看看芯片说明书

 

二、详细说明

2.1 我们给出的参考代码

/*******************************************************************************
 - 函数说明:一线通数据发送【注意调试的时候,用示波器或者逻辑分析仪看一下脉冲宽度】
 - 隶属模块:内部
 - 参数说明:dat = 待发送的数据
 - 返回说明:无 -- 这里对应的就是PA6这个GPIO  ,不同的MCU,对于IO口的操作不同,这个自己理解了
 - 备注:整体的通讯逻辑如下:
1、先把数据线DATA,也就是ONELINE,拉低 6ms 后,发送 8 位数据,先发送低位,再发送高位。
2、使用高电平和低电平比例来表示每个数据位的值。
3、推荐使用 200us:600us。取值范围:窄脉冲=[150us--400us]    宽脉冲[500us--1000us]
********************************************************************************/
#define IO1_HIGH()		JL_PORTA->DIR &= ~BIT(6);JL_PORTA->OUT |=  BIT(6);     //PA6输出高电平
#define IO1_LOW()		JL_PORTA->DIR &= ~BIT(6);JL_PORTA->OUT &= ~BIT(6);     //PA6输出低电平
void oneline_send_one_data(u8 dat) 
{
    u8 i = 0 ;
    IO1_LOW() ;/*现将总线拉低*/
    udelay(5000) ;/*延时6MS --- 这里就是发起通讯的起始信号------注意不同的芯片延时不一样,请自行测试*/
    OS_ENTER_CRITICAL();//关中断--芯片不同,可能接口不同
    for(i=0 ; i<8 ;i++){
        if(dat & 0x01){
            IO1_HIGH() ;
            udelay(500);/*延时600us*/
            IO1_LOW();
            udelay(170) ;/*延时200us*/
        }else{
            IO1_HIGH() ;
            udelay(170);/*延时200us*/
            IO1_LOW();
            udelay(500) ;/*延时600us*/
        }
        dat = dat >> 1 ;/*发送的时候,先发送最高位,再发送次高位,以此类推*/
    }
    IO1_HIGH() ;/*空闲时将该脚拉高即可*/
    OS_EXIT_CRITICAL();//开中断
    /*同时注意,芯片初始化的时候,请将信号脚拉高。*/
}
程序调用的接口如下:
oneline_send_one_data(0x05);//对应播放第5段声音 
发不同的命令,就请对照详细的手册,有描述的,耐心看看 ,详细看看手册的章节三和章节四

/******************************例程可能出现的疑惑********************************
1、为什么按照例程发的数据,没反应呢?
==》面对这个问题,应该是借助仪器:示波器、逻辑分析仪等等仪器来测试你的波形
==》而不是来问我们什么原因,我们也没法给出意见,最好用仪器看一下,找出问题来

2、为什么程序里面,需要关中断、再来开中断呢?
==》这样的目的,是为了保证波形的完整性,因为你的,注意是你的mcu运行时候,可能存在
多种中断交替,这样就会导致在发送波形的途中,被打断,导致时间变长,或者其他
==》这个就看你具体的程序逻辑了,其实这样的问题我们也不想回答,这是您应该知道的
********************************************************************************/

2.2 参考波形图--逻辑分析仪

 

起始信号一定不能低于6ms ,请严格按照这个去写程序注意点:

  1. 遇到问题,第一时间,请用工具,用工具,不要一开始就问我们怎么发数据了,没反应,很崩溃的
  2. 另外很多的工程师,可能不习惯于用逻辑分析仪,都喜欢拿示波器去量。真的实在是太痛苦了

只要是数字信号,推荐逻辑分析仪,不仅波形抓起来漂亮直观,抓数据的时间还长,

强烈推荐使用,老手请忽视

2.3 关于芯片待机5秒自动进入待机

  1. 由于芯片要兼容低功耗的应用,所以不得不设计一个低功耗的机制

  1. 芯片一旦进入空闲,计时超过5秒之后,自动待机,功耗为25uA左右。进入待机之后芯片所有的外设都是关闭的,包括busy脚也是弱上拉的状态

  1. 进入待机之后,芯片的data脚,设置的是下降沿唤醒,所以当主MCU发送数据的时候,为什么前面需要6ms的起始信号,很大一部分的原因,是因为芯片唤醒之后到正常读取一线的数据,中间需要大概2-3ms的时间 。所以起始信号一定要给足6ms

2.4 关于芯片低功耗的F0指令说明

  1. 如果需要芯片的功耗再低,则需要发送F0指令,任何状态下都可以

2、芯片接收到F0指令之后,就会进入关机状态,功耗维持在1.7uA左右

3、如果需要芯片再次接收指令,必须先将dat信号拉低40ms,让芯片被唤醒,再发送数据就可以了

==》这里的主MCU发送40ms的低电平之后,再紧接着将data脚拉高就可以了

==》此时如果需要发指令,就再延时个15ms就可以了,合计也就是65ms左右了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值