<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://paz00.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A7%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%8B_%D0%B8_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B8</id>
	<title>Частоты и делители - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://paz00.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A7%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%8B_%D0%B8_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B8"/>
	<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=%D0%A7%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%8B_%D0%B8_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B8&amp;action=history"/>
	<updated>2026-05-04T00:42:28Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://paz00.ru/index.php?title=%D0%A7%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%8B_%D0%B8_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B8&amp;diff=181&amp;oldid=prev</id>
		<title>Unknown user в 08:14, 15 октября 2014</title>
		<link rel="alternate" type="text/html" href="https://paz00.ru/index.php?title=%D0%A7%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%8B_%D0%B8_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D0%B8&amp;diff=181&amp;oldid=prev"/>
		<updated>2014-10-15T08:14:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;android: MCLK = 11.3 MHz, SDAC=BCLK=2.8 MHz, SDALRCK=44.1 kHz&lt;br /&gt;
Linux: MCLK=absent, SDAC=BCLK=11.3 MHz, SDALRCK=44.1 kHz&lt;br /&gt;
'''Вывод''': i2s1 не понятно куда идет... audio или pll_a_out0 идет туда, куда должна идти i2s1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Возьмем для примера две похожие строки из Appendix A и попытаемся разобраться, что за делители выставляются в регистрах 60h и 62h.&lt;br /&gt;
[[File:alc5632_clocks_sample.PNG]]&lt;br /&gt;
&lt;br /&gt;
Рассматривать делители будем пока только относительно воспроизведения (т.е. нас интересует DAC - digital to analogue - цифровые данные в аналоговые).&lt;br /&gt;
Имеем:&lt;br /&gt;
частота дискретизации (?) [3-й столбец] - 44100 (44.1 кГц)&lt;br /&gt;
(а) частота (???) [2-й столбец] - 2822400 (2.8224 МГц)&lt;br /&gt;
(б) частота (???) [2-й столбец] - 1411200 (1.4112 МГц)&lt;br /&gt;
основная частота [1-й столбец] - 22579200 (22,5792 МГц)&lt;br /&gt;
&lt;br /&gt;
Рассмотрим отношения частот:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1411200 / 44100 = 32&lt;br /&gt;
22579200 / 1411200 = 16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2822400 / 44100 = 64&lt;br /&gt;
22579200 / 2822400 = 8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим значения регистров 60h 62h:&lt;br /&gt;
При переходе от варианта (а) к варианту (б) изменилось только значение регистра 60h, значит только он и будет интересовать нас в данном случае.&lt;br /&gt;
Распишем значения (Reg-60h: Stereo DAC Clock Control_1):&lt;br /&gt;
(а) Reg 60h (3075 - 11000001110101)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[15 12] 0011 (3): stereo_i2s_bclk_div1 0000: /1, 0001: /2,..., 1111: /16&lt;br /&gt;
11  0: Reserved&lt;br /&gt;
[10 8] 000 (0): stereo_i2s_bclk_div2 000: /2, 001: /4, 010: /8, 011: /16, 100: /32, Others: Reserved&lt;br /&gt;
[7 4] 0111 (7): stereo_i2s_ad_lrck_div1 0000: /1, 0001: /2 ..., 1111: / 16&lt;br /&gt;
[3 1] 010 (2): stereo_i2s_ad_lrck_div2 000: /2, 001: /4, 010: /8, 011: /16, 100: /32, Others: Reserved&lt;br /&gt;
0   1: stereo_i2s_da_lrck_div 0: /32, 1: /64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
stereo_i2s_bclk_div1 = 1/4&lt;br /&gt;
stereo_i2s_bclk_div2 = '''1/2'''&lt;br /&gt;
stereo_i2s_da_lrck_div = '''1/64'''&lt;br /&gt;
div1 * div2 = 1/8&lt;br /&gt;
&lt;br /&gt;
(б) Reg 60h (3174 - 11000101110100)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[15 12] 0011 (3): stereo_i2s_bclk_div1 0000: /1, 0001: /2,..., 1111: /16&lt;br /&gt;
11  0: Reserved&lt;br /&gt;
[10 8] 001 (1): stereo_i2s_bclk_div2 000: /2, 001: /4, 010: /8, 011: /16, 100: /32, Others: Reserved&lt;br /&gt;
[7 4] 0111 (7): stereo_i2s_ad_lrck_div1 0000: /1, 0001: /2 ..., 1111: / 16&lt;br /&gt;
[3 1] 010 (2): stereo_i2s_ad_lrck_div2 000: /2, 001: /4, 010: /8, 011: /16, 100: /32, Others: Reserved&lt;br /&gt;
0   0: stereo_i2s_da_lrck_div 0: /32, 1: /64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
stereo_i2s_bclk_div1 = 1/4&lt;br /&gt;
stereo_i2s_bclk_div2 = '''1/4'''&lt;br /&gt;
stereo_i2s_da_lrck_div = '''1/32'''&lt;br /&gt;
div1 * div2 = 1/16&lt;br /&gt;
&lt;br /&gt;
Фантастика :) Мы получили соотношения частот!&lt;br /&gt;
Теперь нужно разобраться, от чего меняется частота в столбце 2. Есть предположение, что это связано с количеством каналов звука! ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Согласно определению [http://en.wikipedia.org/wiki/Sampling_rate sampling rate] имеем:&lt;br /&gt;
Fs - частота дискретизации (sampling rate, sample rate, or sampling frequency).&lt;br /&gt;
1/Fs - длительность сампла (sampling period or sampling interval)&lt;br /&gt;
&lt;br /&gt;
[[File:alc5632_i2s_data_format.PNG]]&lt;br /&gt;
&lt;br /&gt;
BCLK должна быть такой, чтобы за период времени влезли все данные.&lt;br /&gt;
Т.е. чтобы впихнуть данные (2 канала, 16 бит на канал) с частотой дискретизации Fs нужно, чтобы BLCK было равно 2 * 16 * Fs = 32 * Fs. В нашем случае 32 * 44.1 кГц = 1.4112 МГц&lt;br /&gt;
&lt;br /&gt;
SLRCK должна быть равна Fs, если у нас один канал, и должна быть вдвое больше, если каналов 2. В нашем случае 2 * 44.1 кГц = 88.2 кГц.&lt;br /&gt;
&lt;br /&gt;
Согласно даташиту&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
When PLL1 is enabled, MCLK is suggested to provide&lt;br /&gt;
frequency between 2.048MHz to 40MHz, and PLL1 should be configured to support 512*Fs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
основная частота (Stereo_I2S_SYSCLK) должна быть равна 512 * Fs. В нашем случае 512 * 44.1 кГц = 22.5792 МГц&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://gitorious.org/trimslice-kernel/trimslice-kernel/blobs/master/arch/arm/mach-tegra/tegra2_clocks.c#line1206 tegra2_clocks.c in trimslice]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            /* We could un-tristate the cdev1 or cdev2 pingroup here; this is&lt;br /&gt;
             * currently done in the pinmux code. */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I found difference in dev1 clock initialization between our source tree and nv-tegra/trimslice. In our tree cdev1 have parent. In other trees it is have no parent and specified rate and max_rate. Is it matter ? ...&lt;br /&gt;
&lt;br /&gt;
https://gitorious.org/trimslice-kernel/trimslice-kernel/blobs/master/arch/arm/mach-tegra/tegra2_clocks.c#line1705&lt;br /&gt;
https://gitorious.org/trimslice-kernel/trimslice-kernel/blobs/master/arch/arm/mach-tegra/board-trimslice.c#line235&lt;br /&gt;
vs&lt;br /&gt;
https://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/arch/arm/mach-tegra/board-paz00.c#line423&lt;br /&gt;
https://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/arch/arm/mach-tegra/tegra2_clocks.c#line1968&lt;br /&gt;
&lt;br /&gt;
[http://ac100.wikispaces.com/file/view/dmesg-cdev-clocks.txt/254258276/dmesg-cdev-clocks.txt логи с изменениями для клока cdev1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Разбираем [https://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/arch/arm/mach-tegra/pinmux-t2-tables.c#line107 PINGROUP для CDEV1] по исходникам тошибы&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PINGROUP(CDEV1, AUDIO, OSC,       PLLA_OUT,  PLLM_OUT1, AUDIO_SYNC,    OSC,       0x14, 4,  0x88, 2,  0xA8, 0),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
0x14, 4 - arch/arm/mach-tegra/include/ap20/arapb_misc.h&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Register APB_MISC_PP_TRISTATE_REG_A_0&lt;br /&gt;
#define APB_MISC_PP_TRISTATE_REG_A_0                    _MK_ADDR_CONST(0x14)&lt;br /&gt;
#define APB_MISC_PP_TRISTATE_REG_A_0_Z_CDEV1_RANGE                      4:4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x88, 2 - arch/arm/mach-tegra/include/ap20/arapb_misc.h&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Register APB_MISC_PP_PIN_MUX_CTL_C_0&lt;br /&gt;
#define APB_MISC_PP_PIN_MUX_CTL_C_0                     _MK_ADDR_CONST(0x88)&lt;br /&gt;
#define APB_MISC_PP_PIN_MUX_CTL_C_0_CDEV1_SEL_RANGE                     3:2&lt;br /&gt;
#define APB_MISC_PP_PIN_MUX_CTL_C_0_CDEV1_SEL_OSC                       _MK_ENUM_CONST(0)&lt;br /&gt;
#define APB_MISC_PP_PIN_MUX_CTL_C_0_CDEV1_SEL_PLLA_OUT                  _MK_ENUM_CONST(1)&lt;br /&gt;
#define APB_MISC_PP_PIN_MUX_CTL_C_0_CDEV1_SEL_PLLM_OUT1                 _MK_ENUM_CONST(2)&lt;br /&gt;
#define APB_MISC_PP_PIN_MUX_CTL_C_0_CDEV1_SEL_AUDIO_SYNC                        _MK_ENUM_CONST(3)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0xa8, 0 - arch/arm/mach-tegra/include/ap20/arapb_misc.h&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Register APB_MISC_PP_PULLUPDOWN_REG_C_0&lt;br /&gt;
#define APB_MISC_PP_PULLUPDOWN_REG_C_0                  _MK_ADDR_CONST(0xa8)&lt;br /&gt;
#define APB_MISC_PP_PULLUPDOWN_REG_C_0_CDEV1_PU_PD_WOFFSET                      0x0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Табличка для pll_a у марвина&lt;br /&gt;
[http://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/arch/arm/mach-tegra/tegra2_clocks.c#line1697 http://gitorious.org/~marvin24/ac100/marvin24s-kernel/blobs/chromeos-ac100-2.6.38/arch/arm/mach-tegra/tegra2_clocks.c#line1697]&lt;br /&gt;
Табличка для pll_a в froyo&lt;br /&gt;
[http://gitorious.org/ac100/kernel/blobs/toshiba_froyo/arch/arm/mach-tegra/tegra2_clocks.c#line905 http://gitorious.org/ac100/kernel/blobs/toshiba_froyo/arch/arm/mach-tegra/tegra2_clocks.c#line905]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>