10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 08:51 | 显示全部楼层
DIFF解析

DIFF格式相对复杂,不过只是比 DSF 稍微复杂一点。

如果说 DSF 完全是 WAV 格式翻版的话,DIFF 格式就是 DSF 格式的进阶版了。

DIFF 格式需要有一个简单的解析过程。

总体头格式:

固定头+其他头

固定头格式如下:

"FRM8"(4 bytes)DataSize(8 bytes)"DSD "(4 bytes)

结构定义:
typedef struct {
  u8 ID[4];  // 'FRM8'
  uint64_t  DataSize;  // FORM's data size
  u8  formType[4];  // 'DSD '
} DIFF_HEAD;


其他头,按照以下格式依次存储:
ID1(4 bytes)Size1(8 bytes)INFO1(Size1)ID2(4 bytes)Size2(8 bytes)INFO2(Size2)。。。。。。

整个 DIFF 其他头部信息格式如下:


DIFF_FORM_CHUNK.jpg

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 08:55 | 显示全部楼层
有一个DIFF文档,详细描述了 DIFF 文件格式。有兴趣者可留邮箱。

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 09:02 | 显示全部楼层
op111op 发表于 2015-5-26 18:19
楼主,再接再厉介绍一下DIFF

已经更新

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 09:04 | 显示全部楼层
musich 发表于 2015-5-26 23:22
那就叫 left-justified,  不是i2s了.

I2S 的几种格式都支持 32bit ,这个不用怀疑吧?

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 09:10 | 显示全部楼层
lter15 发表于 2015-5-25 09:37
lz估计对jitter都不怎么了解吧,高端的音频设备对时钟的要求比很多的网络时钟要求还高。

了解确实不够精深,不过我之前的更多注意力是放在整体结构和软件上,以及很多功能细节的处理上。毕竟这个是最基本的前提。先吃饱,再吃好。

后面多多学习,逐渐往更高的要求靠拢。争取吃好。

已经有初步的方案,借助 WM8805 屏蔽 STM32F407 的时钟,在第二版中加以实现。

谢谢关注。

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 09:11 | 显示全部楼层
musich 发表于 2015-5-25 18:58
说的原始的i2s标准是16bit,还是单工的, F4的支持到32位,用LJ方式也挺爽.
DMA 32位都支持, 只是DMA以16 ...

确实,F407是可以支持到 32bit 192K 的

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 09:14 | 显示全部楼层
musich 发表于 2015-5-25 19:15
再补充一下,用标准的i2s方式,是支持不到32bit的,最多31bit,
因标准的i2s的数据是右移一位的,LJ方式可以 ...

这个不会吧,右移的那一位,在后面紧跟的 WS 信号第一位,也就是 本身 WS 信号的后 31 位 + 后面 WS 信号的第 1 位,构成了 32 位。

这样理解吧

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 09:14 | 显示全部楼层
焱月融雪 发表于 2015-5-26 15:11
你也得去看看时序图了,标准I2S发送32BIT的时候,从第二帧开始,最高BIT就是第32位

赞同这个理解

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 09:25 | 显示全部楼层
jinggx 发表于 2015-5-24 23:41
bug是在slave模式下会失步。所以slave用不了,如果想用外部的IIS时钟,其时钟输入的引脚又和SD卡IO复用了 ...

F407 的 I2S 主模式下,192K 32bit 是没有问题的,就功能性而言,已经不错了。

不过就是大家说的 jitter 问题,需要考虑一些其他措施来降低。

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 09:26 | 显示全部楼层
jinggx 发表于 2015-5-25 00:23
记得iis数据寄存器是16位的,iis的dma也只能16位,当时就放弃去研究了。印象中是这样,手机上网,懒得去查 ...

寄存器是 16 bit,但是没有说只支持 16 bit,可以分两次处理 32 bit 的(都是 DMA 做,自动的)。

F407 支持 32bit 192K 没有任何问题。

38

主题

1

好友

478

积分

业余侠客 当前离线

Rank: 4

UID
5498
帖子
361
精华
0
经验
478 点
金钱
358 ¥
注册时间
2005-9-8
发表于 2015-5-27 12:54 | 显示全部楼层
DSDIFF_1.5_Spec.zip (104.44 KB, 下载次数: 489)

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-27 13:21 | 显示全部楼层
本帖最后由 jialong0926 于 2015-5-27 13:23 编辑
maxwang71 发表于 2015-5-27 12:54
我上传个diff 的介绍


我都忘了可以直接发文件的,昨天开发软件头晕了。

就是这个文档。

2

主题

0

好友

36

积分

注册会员 当前离线

Rank: 2

UID
791848
帖子
37
精华
0
经验
36 点
金钱
32 ¥
注册时间
2015-5-10
发表于 2015-5-27 19:40 | 显示全部楼层

没玩过DSD, 听说 DSD 最的大优势是采样噪声, 我的理解它就是更低成本的PWM, 大大的损失了DR,

哪位给扫扫盲呗?

5

主题

2

好友

949

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
156799
帖子
948
精华
0
经验
949 点
金钱
938 ¥
注册时间
2009-12-19

社区贡献 乐于助人

发表于 2015-5-27 20:37 | 显示全部楼层
jialong0926 发表于 2015-5-27 09:25
F407 的 I2S 主模式下,192K 32bit 是没有问题的,就功能性而言,已经不错了。

不过就是大家说的 jitt ...

加了两个外置的时钟,M4用从模式,然后再加个FPGA,做个FIFO就可以了。

2

主题

0

好友

36

积分

注册会员 当前离线

Rank: 2

UID
791848
帖子
37
精华
0
经验
36 点
金钱
32 ¥
注册时间
2015-5-10
发表于 2015-5-28 04:49 | 显示全部楼层
lter15 发表于 2015-5-27 20:37
加了两个外置的时钟,M4用从模式,然后再加个FPGA,做个FIFO就可以了。

加FPGA太复杂了, CPLD足够了,
更简单的做法,用两片4060,加有源晶体搞定,
有源晶体就作MCK啦, 一片4060从晶体分频得到BCK,另一片分频得到LRCK, 搞定, "零"抖动 哈哈,

2

主题

0

好友

36

积分

注册会员 当前离线

Rank: 2

UID
791848
帖子
37
精华
0
经验
36 点
金钱
32 ¥
注册时间
2015-5-10
发表于 2015-5-28 04:53 | 显示全部楼层
若觉得两个4060太麻烦,
可以找一片有主模式的ADC或DAC芯片,一般这类芯片100%不会有PLL的,也可以得到 "零"抖动时钟.

10

主题

8

好友

518

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
712589
帖子
505
精华
0
经验
518 点
金钱
495 ¥
注册时间
2014-6-12
 楼主| 发表于 2015-5-28 08:09 | 显示全部楼层
musich 发表于 2015-5-28 04:49
加FPGA太复杂了, CPLD足够了,
更简单的做法,用两片4060,加有源晶体搞定,
有源晶体就作MCK啦, 一片4060 ...

4060支持的频率太低了,用不了吧

2

主题

0

好友

36

积分

注册会员 当前离线

Rank: 2

UID
791848
帖子
37
精华
0
经验
36 点
金钱
32 ¥
注册时间
2015-5-10
发表于 2015-5-28 17:58 | 显示全部楼层
本帖最后由 musich 于 2015-5-28 18:00 编辑

jialong0926 发表于 2015-5-28 08:09
4060支持的频率太低了,用不了吧


4060能到50MHz还不够用啊, 可以支持到192k了,
其实用一片就够了, MCK 4分频得到BCK, 256分频得到LRCK, 一片搞定. 爽歪歪吧.

HC4060.JPG

2

主题

0

好友

36

积分

注册会员 当前离线

Rank: 2

UID
791848
帖子
37
精华
0
经验
36 点
金钱
32 ¥
注册时间
2015-5-10
发表于 2015-5-28 18:06 | 显示全部楼层
泄露天机了,  罪过, 罪过,

35

主题

2

好友

413

积分
     

业余侠客 当前离线

Rank: 4

UID
558534
帖子
1808
精华
0
经验
413 点
金钱
340 ¥
注册时间
2013-1-10
发表于 2015-5-29 09:44 来自手机端 | 显示全部楼层
关注高手!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版| ( 鄂ICP备2025138941号-3 ICP证:鄂B2-20130019 公安局网监备:420100007348 邮箱:1343292467@qq.com )

GMT+8, 2025-11-6 07:46 , Processed in 0.180053 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部