1. 首先确定硬件上I2C的引脚,手册上并没有,海思技术支持说是14和15脚,我们用的是12和13脚,问题在于,如果是硬件I2C应该不能随便换个引脚吧,难道是模拟的时序?

2. 下一个奇怪的地方,这个寄存器居然只有两行,没其他地方使用,真奇怪?

看下相关的代码

3. PIO的设置

static I2C_RET i2c_set_pio(PIN pin, FUNC i2c_func)
{
if (pin != PIN_NONE)
{
if(!pio_set_function(pin, i2c_func))
{
return I2C_RET_ERROR;
}
}
}

继续往下看,最终设置的是下面的,还是直接写寄存器的意思?不过后面的半句话不太明白什么意思,意思是把这个数组放到外设的代码段里面。

/**
* Direct access to register address space for all PIOs
*/
static volatile HAL_PIO_REGISTER_MAP hal_pio_registers[ PIN_MAX_NUMBER ] __attribute__((section(".peripherals")));

果然是对应寄存器的值

typedef struct
{
//lint -esym(754,HAL_PIO_REGISTER_MAP::*) Some of these aren't used directly.
uint32 pio_claim; //!< Peripheral claim register - register layout is different for a read compared to a write
uint32 pio_ctrl; //!< PIO_CTRL register
uint32 pio_irq_clr; //!< PIO_IRQ_CLR register
uint32 reserved_0; //!< Reserved
uint32 reserved_1; //!< Reserved
uint32 pio_ctrl_bitset; //!< PIO_CTRL_BITSET register
uint32 reserved_2; //!< Reserved
uint32 reserved_3; //!< Reserved
uint32 reserved_4; //!< Reserved
uint32 pio_ctrl_bitclr; //!< PIO_CTRL_BITCLR register
uint32 reserved_5; //!< Reserved
uint32 reserved_6; //!< Reserved
uint32 reserved_7; //!< Reserved
uint32 pio_ctrl_bittog; //!< PIO_CTRL_BITTOG register
uint32 reserved_8; //!< Reserved
uint32 reserved_9; //!< Reserved
} HAL_PIO_REGISTER_MAP;

看下FUNC的配置,这个应该是引脚复用图吧,难道每个引脚都可以随便作为任何功能?

typedef enum
{
FUNC_UNCLAIMED = ,
FUNC_GPIO = ,
FUNC_UART0_TXD = ,
FUNC_UART0_TXIR = ,
FUNC_UART0_O2 = ,
FUNC_UART0_O1 = ,
FUNC_UART0_RTS = ,
FUNC_UART0_DTR = ,
FUNC_UART0_RXD = ,
FUNC_UART0_RXIR = ,
FUNC_UART0_CTS = ,
FUNC_UART0_DCD = ,
FUNC_UART0_DSR = ,
FUNC_UART0_RI = ,
FUNC_UART1_TXD = ,
FUNC_UART1_TXIR = ,
FUNC_UART1_O2 = ,
FUNC_UART1_O1 = ,
FUNC_UART1_RTS = ,
FUNC_UART1_DTR = ,
FUNC_UART1_RXD = ,
FUNC_UART1_RXIR = ,
FUNC_UART1_CTS = ,
FUNC_UART1_DCD = ,
FUNC_UART1_DSR = ,
FUNC_UART1_RI = ,
FUNC_LPUART_RXD = ,
FUNC_LPUART_TXD = ,
FUNC_DBG_CLK0 = ,
FUNC_DBG_CLK1 = ,
FUNC_DBG_CLK2 = ,
FUNC_DBG_CLK3 = ,
FUNC_RADIO_PIO = ,
FUNC_UICC_CLK = ,
FUNC_UICC_RST = ,
FUNC_UICC_IO = ,
FUNC_DSP_TMS = ,
FUNC_DSP_TDI = ,
FUNC_DSP_TDO = ,
FUNC_DSP_TRST = ,
FUNC_SPI_SCLK = ,
FUNC_SPI_CSB = ,
FUNC_SPI_UNIDIR_IN = ,
FUNC_SPI_UNIDIR_OUT = ,
FUNC_SPI_BIDIR_DATA0 = ,
FUNC_SPI_BIDIR_DATA1 = ,
FUNC_SPI_BIDIR_DATA2 = ,
FUNC_SPI_BIDIR_DATA3 = ,
FUNC_DSP_TCK = ,
FUNC_RADIO_RFFE_SCLK = ,
FUNC_RADIO_RFFE_SDATA = ,
FUNC_PWM0 = ,
FUNC_PWM0B = ,
FUNC_PWM1 = ,
FUNC_PWM1B = ,
FUNC_SSP0TXD = ,
FUNC_SSP0RXD = ,
FUNC_SSP0TRX = ,
FUNC_SSP0CLK = ,
FUNC_SSP0FSS = ,
FUNC_SSP1TXD = ,
FUNC_SSP1RXD = ,
FUNC_SSP1TRX = ,
FUNC_SSP1CLK = ,
FUNC_SSP1FSS = ,
FUNC_I2C0_SDA = ,
FUNC_I2C0_SCL = ,
FUNC_I2C1_SDA = ,
FUNC_I2C1_SCL = ,
FUNC_UART2_TXD = ,
FUNC_UART2_TXIR = ,
FUNC_UART2_O2 = ,
FUNC_UART2_O1 = ,
FUNC_UART2_RTS = ,
FUNC_UART2_DTR = ,
FUNC_UART2_RXD = ,
FUNC_UART2_RXIR = ,
FUNC_UART2_CTS = ,
FUNC_UART2_DCD = ,
FUNC_UART2_DSR = ,
FUNC_UART2_RI = ,
FUNC_MAX = //!< Limit to range of valid values
} FUNC;

芯片的数据手册,这样说起来,这24个PIO可以复用到任何的外设上。现在问题是一共有40个PIO,说的是那24个PIO?

4. 说是PIO分为4个区域,每个区域的电压似乎可以不一样

海思NB-IOT模块HI2115芯片I2C通信的更多相关文章

  1. 海思Hi3518A 海思Hi3518C 海思Hi3518E 这几个芯片都有什么区别么

    在3518A.3518C的基础上深化完善,推出了Hi3518E.作为新一代IP民用摄像机SoC,Hi3518E集成新一代ISP,优化了编码前图像处理算法,采用新一代H.264编码器.同时采用业内领先的 ...

  2. 海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022 SPI 控制器)

    海思3516系列芯片SPI速率慢问题深入分析与优化(基于PL022 SPI 控制器) 我在某个海思主控的项目中需要使用SPI接口来驱动一块液晶屏,液晶屏主控为 st7789,分辨率 240x240,图 ...

  3. [转帖]IPC网络高清摄像机基础知识1(IPC芯片市场分析以及“搅局者”华为海思 “来自2013年”)

    IPC网络高清摄像机基础知识1(IPC芯片市场分析以及“搅局者”华为海思 “来自2013年”) 2016-06-02 14:23:49 Times_poem 阅读数 9734更多 分类专栏: IPC网 ...

  4. 海思 Hi3516A Hi3518E V200 芯片介绍

    海康是生产监控摄像头和硬盘录像机的,海思是提供机器里芯片的,海思属于华为的. http://www.hisilicon.com/en/Products/ProductList/Surveillance ...

  5. 第2季:从官方例程深度学习海思SDK及API

    2.1.官方mppsample的总体分析2.1.sample的整体架构(1)sample其实是很多个例程,所以有很多个main(2)每一个例程面向一个典型应用,common是通用性主体函数,我们只分析 ...

  6. Hi3516开发笔记(一):海思HI3516DV300芯片介绍,入手开发板以及Demo测试

    前言   目前主流国产芯片为RV11XX.RK33XX.Hi35XX系列,本系列开启Hi3516系列的开发教程.   Hi3516DV300芯片介绍   Hi3516DV300为专业行Smart IP ...

  7. RTSPClient工具EasyRTSPClient支持H.265,支持海思等各种芯片平台

    EasyRTSPClient是EasyDarwin开源流媒体团队开发.提供的一套非常稳定.易用.支持重连的RTSPClient工具,接口调用非常简单,再也不用像调用live555那样处理整个RTSP ...

  8. 主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思

    (本文由四川艾普作为数码科技有限公司 苏斌.范清华 收集) 高清网络视频监控发展到今天.正的高清时代.诸多有实力的高清摄像机厂家的产品线也逐渐完好起来,高清网络视频监控的配套产品有更加丰富和成熟.与此 ...

  9. 海思3531添加移远EC20 4g模块(转)

    源: 海思3531添加移远EC20 4g模块 Hi3798移植4G模块(移远EC20)

随机推荐

  1. POJ-1845 Sumdiv---因子和(快速幂+快速加法+因子和公式)

    题目链接: https://cn.vjudge.net/problem/POJ-1845 题目大意: 求AB的因子和 解题思路: 先将A质因数分解,然后B次方的质因数指数就是乘上B即可 这里要mod9 ...

  2. SpringMVC 如何定义类型转换器

    举例说明, 将一个字符串转换成的 User 类型. 例如将字符串 1-zcd-1234-zcd@163.com-1999/12/12  转换成User 类型. 一.实体类 public class U ...

  3. 【[USACO09DEC]牛收费路径Cow Toll Paths】

    很妙的一道题,我之前一直是用一个非常暴力的做法 就是枚举点权跑堆优化dijkstra 但是询问次数太多了 于是一直只有50分 今天终于抄做了这道题,不贴代码了,只说一下对这道题的理解 首先点权和边权不 ...

  4. PHP读取文件内容的五种方式(转载)

    php读取文件内容的五种方式 分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭.实际应用当中,请注意关闭 fclose($fp); php读取文件内容: -----第一种方法--- ...

  5. 第28章 LTDC—液晶显示中英文

    本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.库帮助文档<STM32F779xx_User_Manual.chm>. 关于开发板配 ...

  6. Python 学习笔记(九)Python元组和字典(一)

    Python 元组 元组的定义  元组(tuple)是一种Python对象类型,元组也是一种序列 Python中的元组与列表类似,不同之处元组的元素不能修改 元组使用小括号,列表使用方括号 元组的创建 ...

  7. 协议类接口 - LCD

    一.引脚含义 下图为某LCD相关引脚: 从引脚可以大概看出其SoC的连接情况: 1)VCLK为时钟,每一次像素就移动一次 2)HSYNC/VLINE 3)VSYNC/VFRAME 4)VD0 - VD ...

  8. Oracle创建聚簇表

    创建聚簇表过程: 创建簇(cluster)----创建簇表(基本类似创建一般表但有区别)----创建簇索引(index)----数据管理 创建簇: create cluster stu_ach(sid ...

  9. CodeChef March Lunchtime 2018 div2

    地址https://www.codechef.com/LTIME58B?order=desc&sortBy=successful_submissions 简单做了一下,前三题比较水,第四题应该 ...

  10. jQuery关于复选框的基本小功能

    这里是我初步学习jquery后中巨做的一个关于复选框的小功能: 点击右边选项如果勾上,对应的左边三个小项全部选中,反之全不选, 左边只要有一个没选中,右边大项就取消选中,反之左边全部选中的话,左边大项 ...