5216|7

932

帖子

3

TA的资源

纯净的硅(中级)

楼主
 

【SC8905 EVM测评】+单片机I2C通讯实验 [复制链接]

    早已准备用沁恒CH579开发板来做SC8905EVM的I2C通讯实验,这样做一个实验可以完成两个评测。但调试CH579的I2C通讯花费了不少时间,昨天才调试成功,于是立马来做SC8905的I2C通讯实验。

    从使用指南和数据手册中得知SC8905评测板支持100K和400K两种速度的I2C通讯标准,其写地址为0xC4,读地址为0xC5。10个寄存器的地址依次为01H~0AH(如下图):

    本次首先实验读取寄存器的数据,实验的照片如下,通过外接电源给VBUS供电,万用表读取VBAT的电压:

    下面是读写寄存器的代码,读取的数据存放在SC_Buff[10]数组中,本次仅测试读取寄存器,尚未测试写寄存器:


#include "sc8905.h"
#include "i2c.h"


extern uint8_t SC_Buff[8];

/****************************************************************************************** 
* 函数名称:	SC8905_read()
* 功能说明: 读取SC8905寄存器数据
* 输    入: 无
* 输    出: 无
******************************************************************************************/
uint8_t SC8905_read(void)
{
    uint8_t i = 0;

    SI2C_Start();                   //产生起始信号
    SI2C_Send(SC8905_ADDR);         //发送SC8905芯片地址及读写位,0表示写(先写入起始地址))
    if(1 == SI2CIsAck())            //检测SC8905是否有响应
    {
        SI2C_Stop();                //产生停止信号
		return 2;
    }

    SI2C_Send(1);                   //从0x01地址开始读寄存器
    if(1 == SI2CIsAck())            //检测SC8905是否有响应
    {
        SI2C_Stop();	            //产生停止信号
        return 3;
    }
    
    SI2C_Start();                   //产生Repeated Start
    SI2C_Send(SC8905_ADDR|1);       //发送SC8905芯片地址及读写位,1表示读
    if(1 == SI2CIsAck())            //检测SC8905是否有响应
    {
        SI2C_Stop();                //产生停止信号
        return 4;
    }

    for(i=0; i<10; i++)             //从起始地址开始连续读取10个字节的数据
    {
        SC_Buff[i] = SI2C_Receive();
//        SI2CDoAck();
    }

    SI2C_Stop();                    //产生停止信号
	return 0;

}

/****************************************************************************************** 
* 函数名称:	SC8905_write()
* 功能说明: 将数据写入SC8905寄存器
* 输    入: 无
* 输    出: 无
******************************************************************************************/
uint8_t SC8905_write(void)
{
    uint8_t i = 0;

    SI2C_Start();                   //产生起始信号
    SI2C_Send(SC8905_ADDR|0);       //发送SC8905芯片地址及读写位,0表示写
    if(1 == SI2CIsAck())            //检测SC8905是否有响应
    {
        SI2C_Stop();                //产生停止信号
        return 1;
	}

    SI2C_Send(1);                   //发送数据要写入的地址
    if(1 == SI2CIsAck())            //检测SC8905是否有响应
    {
        SI2C_Stop();                //产生停止信号
        return 2;
    }

    for(i=0; i<8; i++)              //依次写入8个字节的数据到寄存器
    {
        SI2C_Send(SC_Buff[i]);
        if(1 == SI2CIsAck())        //检测SC8905是否有响应
        {
            SI2C_Stop();            //产生停止信号
            return 3;
        }
    }

    SI2C_Stop();                    //产生停止信号
    return 0;
}

    开始测试时没有对SC8905评测板供电,读取到前8个寄存器的数值全为0:

    为SC8905供电之后(VBUS或者VBAT均可),读取的寄存器数据不为0(见下图),应该是读取到了寄存器的数据:

    按理开机直接读取寄存器的数据应该是默认值,但我读取的数据除了01H(CSO_SET寄存器)数据正确外(40=0x0010 1000),其他7个数据全是255(即0x1111 1111),与默认值不一致,也许是我的连续读命令不正确所致。

    下面是数据手册中对I2C通讯描述的译文:

SC8905_I2C.docx (385.54 KB, 下载次数: 64)

MCU_01.jpg (692.64 KB, 下载次数: 1)

MCU_01.jpg
此帖出自电源技术论坛

最新回复

     求SC8905 或者SC08906 的芯片 I2C 设置工具,一台无人机电池管理芯片是SC8906 电池饿死被锁,没找到任何的解锁软件,或者南芯电源管理芯片的设置软件及设置说明,这一点Ti做的比较好,提供了专门的芯片管理软件。大疆的绝大多数电池管理芯片都是Ti的能进行解锁或者换电芯DIY,如果哪位大侠有南芯的电池芯片设置工具,希望能分享一下,我邮箱是1205345948@qq.com   详情 回复 发表于 2024-9-26 22:57
点赞(1) 关注
 
 

回复
举报

932

帖子

3

TA的资源

纯净的硅(中级)

沙发
 

    仔细检查了代码,原来误将读循环中的一行DOACK注释了(第44行),所以就不能继续读取数据,将注释去掉之后再测试,就读取到正确的寄存器默认值:

寄存器地址      默认值          读取值(十进制)

    01H       0x0010 1000              40 

    02H       0xxxxx  xx00                0

    03H       0x0000 0000                0

    04H       0xxxx0 0000                0

    05H       0x0001 0000              16

    06H       0x0011 0000              48

    07H       0xxxxx xx10                2

    08H       0x0000 0001               1

二者完全一致,证明读取数据完全成功。

此帖出自电源技术论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

板凳
 

    补上屏幕局部的照片,这样看得更清楚:

 

此帖出自电源技术论坛
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

4
 

南芯SC8905 EVM测评

汇总贴:https://bbs.eeworld.com.cn/thread-1140004-1-1.html

此帖出自电源技术论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 

学习了 非常好

此帖出自电源技术论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 

大佬,为啥这款芯片的资料在南芯官网搜不到呀

此帖出自电源技术论坛

点评

我被您给难倒了!抱歉的很,我无法回答您的问题,因为我与厂家也不熟悉。  详情 回复 发表于 2024-4-6 17:06
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

7
 
HJ_Guang 发表于 2024-4-5 21:49 大佬,为啥这款芯片的资料在南芯官网搜不到呀

我被您给难倒了!抱歉的很,我无法回答您的问题,因为我与厂家也不熟悉。

此帖出自电源技术论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

8
 

     求SC8905 或者SC08906 的芯片 I2C 设置工具,一台无人机电池管理芯片是SC8906 电池饿死被锁,没找到任何的解锁软件,或者南芯电源管理芯片的设置软件及设置说明,这一点Ti做的比较好,提供了专门的芯片管理软件。大疆的绝大多数电池管理芯片都是Ti的能进行解锁或者换电芯DIY,如果哪位大侠有南芯的电池芯片设置工具,希望能分享一下,我邮箱是1205345948@qq.com

此帖出自电源技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表