最近调试了I2S。由于芯片里面硬件配置出现了几个错误,着实也把我折腾了一番,不过,最终

还是把它搞定了。为了加深理解,就做个笔记吧,方面以后查找和学习。

  定义:I²SI2S(英语:Inter-IC SoundIntegrated Interchip Sound)是IC间传输数字音频数据

的一种接口标准,采用序列的方式传输2组(左右声道)数据。I2S常被使用在发送CDPCM音频数据

到CD播放器的DAC中。由于I2S将数据信号和时钟频率信号分开发送,它的抖动(jitter)有损十分地小。

  基本概念

I²S由3条传输线组成:

  1. 比特时钟频率线(BCLK: bit clock line)
  2. 字符选择线(word select line)或左右时钟频率线(left right clock line)(LRCLK)
  3. 至少一条复合数据线(SDATA:multiplexed data)
  4. 有时为了使系统间能够更好地同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟(Sys Clock),是采样频率的256倍或384倍。

也有可能找到以下这些线:

  1. 主时钟频率:256个典型的左右时钟频率线(MCLK= 256*LRCLK)
  2. 上传数据的复合消息(multiplex)线

I²S由前述的比特时钟频率、字符时钟频率和数据三条线所组成。当新的数据被放到数据在线时,比特时钟频率

就会跳动一次。它以数据采样率的64倍速度在运作,诸如CD的采样率为44.1 KHz,要传输它所使用的比特时钟

频率就为2.8224 MHz。I²S的数据线允许两个轨道的数据同时发送,而字符选择时钟频率能让接收设备知道现在

正在发送轨道1或轨道2的数据。每个轨道可传输32位的数据,所以显而易见地,字符选择时钟频率和声音的采

样率时钟频率是相同的。比特时钟频率即是采样率时钟频率的64倍,44.1KHz x 2个声道 x 32位 = 2.8224MHz。

  I²S的数据是从高比特(MSB)发送至低比特(LSB),从字符选择时钟频率的左端开始,加上一个比特时

钟频率的延迟,即数据将比字符选择时钟频率要慢一个比特时钟频率。也有左校正(Left Justified)的I²S数据流

,它没有比特时钟频率的延迟,数据和字符选择时钟频率是同步的。右校正(Right Justified)则是数据比字符

选择时钟频率快一个比特时钟频率。

  系统配置方法:

  要注意master和slave的配置方式是不一样的,slave的配置:

   i2sip_w_slave_i2sip(reg_base,HAL_I2S_SLAVE);  //配置salve模式

  WRITE_REG(0x0,I2S_BASE,0x68);  //关闭其他通道。
  WRITE_REG(0x0,I2S_BASE,0xa8);
  WRITE_REG(0x0,I2S_BASE,0xe8);

  定位思路:

  A 首先要调试master模式,这种简单,一般通过示波器查看是否有时钟或者数据发出。要看波形,最好在

  发送中写入:0x55 (特殊方法,高低高低)

  B 其次,调试slave模式的情况下,首先查看是否有软件接收中断,如果有,说明配置正确,如果没有

  要查看寄存器配置,确定slave模式是否打开成功。

  C 要确定slave模式接收到的数据是否正确,master发送正玄波,固定数等进行测试。

  D 一定要确定外边的使用的硬件环境是否OK,具体有几种情况需要确定,线缆,能否发送,能否接收,

   今天就遇到一个i2s的线缆接触不良的问题,真是坑人啊。

嵌入式小系统I2S接口调试总结的更多相关文章

  1. 嵌入式Linux系统Bootloader启动调试技术(回想)

    嵌入式系统搭建过程中,对于系统平台搭建project师最初的一步一般是移植Bootloader ,当然移植有几个级别,通常最常见的是參考的EVM 的硬件有了改动(如更改了FLASH ,更改了SDRAM ...

  2. 基于ARM9和嵌入式Linux系统的多功能综合通信控制系统的框架

    基于ARM9硬件平台和嵌入式Linux系统的多功能综合通信控制系统的框架设计及各模块的功能.系统采用符合POSIX.1标准的C语言编写,实现了对下位机传送数据帧的采集.分析和存储,并能根据上位机的配置 ...

  3. 基于s5pv210嵌入式linux系统sqlite3数据库移植

    基于s5pv210嵌入式linux系统sqlite3数据库移植 1.下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2.解压 tar xvf ...

  4. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  5. 浅析嵌入式Linux系统的构成和启动过程

    在我们的周围,大量的嵌入式设备都是基于Linux系统来构建的,嵌入式Linux与主机Linux相比有着自己的一些特点,本文就嵌入式Linux系统的构成和启动过程做一些总结. 一.嵌入式Linux系统构 ...

  6. 嵌入式Linux系统的构成和启动过程

    转自:http://blog.csdn.net/weiganyi/article/details/11561859 在我们的周围,大量的嵌入式设备都是基于Linux系统来构建的,嵌入式Linux与主机 ...

  7. ESP8266 软件实现 Delta-sigma(ΔΣ)调制器 并通过I2S接口输出编码流

    一.关于Delta-sigma(ΔΣ)调制器 Delta-sigma(ΔΣ)调制器是Delta-sigma转换器的核心部件.如下所示为一个简单的一阶Delta-sigma调制器,该调制器产生一个1bi ...

  8. 嵌入式linux系统中,lsusb出现unable to initialize libusb: -99 解决办法 【转】

    转自:http://cpbest.blog.163.com/blog/static/41241519201111575726966/ libusb是linux系统中,提供给用户空间访问usb设备的AP ...

  9. 4种用于构建嵌入式linux系统的工具_转

    转自:4种用于构建嵌入式linux系统的工具 Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备.令人震惊的支持了各种芯片,使得Linux 可以应用于大大小小 ...

随机推荐

  1. jquery中的callbacks之我见

    callbacks是jquery的核心之一. 语法如下: jQuery.Callbacks( flags )   flags 类型: String 一个用空格标记分隔的标志可选列表,用来改变回调列表中 ...

  2. Linux查看某个端口的连接数

    一.查看哪些IP连接本机 netstat -an 二.查看TCP连接数 1)统计80端口连接数 netstat -nat | grep -i "80" | wc -l 2)统计ht ...

  3. JQuery的可见性选择器

    1. <div id="test" style="width:400px;height:200; background:#0000ff;display:block; ...

  4. mybatis 根据参数映射对应模型

    ORM 框架的优势在于能让我们利用面向对象的思维去操作数据库, hibernate 作为重量级的 ORM 框架对面向对象的支持很强大.作为半自动化的 mybatis ,对面向对象的支持也是很完备的.这 ...

  5. 微服务SpringCloud无法进行服务消费

    最近用SpringCloud做微服务,一直无法成功进行服务消费. 我使用的服务消费者是Feign,声明式调用服务提供者. 排查过程 1.检查服务提供者: (1)对提供的方法进行测试,确保提供的服务没有 ...

  6. 网络请求Adapter添加数据

    一般在开发中我们都需要在listview中添加数据显示在界面上 1.首先我们会在布局中写一个listview <FrameLayout xmlns:android="http://sc ...

  7. mysql 报错You can't specify target table 'wms_cabinet_form' for update in FROM clause

    这个错误是说从t表select出来的无法又更新t表. 可以在select的时候先取个别名,弄个临时表即可.

  8. 9.22 Sans-serif VS Serif

    在FCC做题遇到了sans-serif 以及 serif字体,第一次遇到,所以查了一下: 西方国家字母体系分为两类:serif 以及sans serif. 原来Sans-serif是无衬线字体,没有额 ...

  9. centos关机与重启命令 shutdown -r now 立刻重启

    centos关机与重启命令详解与实战 Linux centos重启命令: .reboot .shutdown -r now 立刻重启(root用户使用) .shutdown -r 过10分钟自动重启( ...

  10. 小姐姐手把手教你JS数组中的对象去重

    有时候数据库中的数据重复的,我们另一个需求需要数据的唯一性 那么这时候就用到这个方法了  我还是以截图的方式发粗来  不然太丑了 见谅 console.log(map)打印出来的结果已经帮我们把需要的 ...