element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Vision Thing
  • Challenges & Projects
  • Project14
  • Vision Thing
  • More
  • Cancel
Vision Thing
Forum I am getting only 1 channel out of 2, for each serial pin in Beaglebone AI
  • Blog
  • Forum
  • Documents
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Vision Thing to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 0 replies
  • Subscribers 6 subscribers
  • Views 778 views
  • Users 0 members are here
  • audio
  • beaglebone ai
  • mcasp
  • beagleboard
Related

I am getting only 1 channel out of 2, for each serial pin in Beaglebone AI

mqya95
mqya95 over 3 years ago

Hello I want to record 8 channels from TIDA-01454 CMB into a Beaglebone AI. As the CMB is built with two PCM1864 ADCs and it is also a Beagle board, I followed this guide(https://www.ti.com/lit/an/sprac97/sprac97.pdf) with some changes(channels_max=16).

I have managed to record audio from 4 of the 8 microphones that the CMB has(I just tap the mic to check if that one is working). However I want to record the 8 channels. Currently the working microphones are MIC1, MIC4, MIC5 and MIC8, although I would say there is much noise.The CMB has 4 data output pins, I suppose each one transmits 2 channels, so the problem is that each pin is getting mono instead of stereo. This might be because a problem in DTS, therefore this is my dts file:

pcm5102a: pcm5102a { 

     #sound-dai-cells = <0>; 

     compatible = "ti,pcm5102a"; 

     status = "okay"; 

  }; 

   

   

  sound {compatible = "simple-audio-card"; 

    simple-audio-card,format = "i2s"; 

    simple-audio-card,name = "PCM5102a"; 

    simple-audio-card,bitclock-master = <&sound1_master>; 

    simple-audio-card,frame-master = <&sound1_master>; 

    simple-audio-card,bitclock-inversion; 

     

     

    simple-audio-card,cpu { 

            sound-dai = <&mcasp1>; 

    }; 

    sound1_master: simple-audio-card,codec { 

        #sound-dai-cells = <0>; 

        sound-dai = <&pcm5102a>; 

          //clocks = <&mcasp1_fck>; 

          //clock-names = "mclk"; 

      }; 

  }; 

&mcasp1 { 

    #sound-dai-cells = <0>; 

    pinctrl-names = "default"; 

    pinctrl-0 = <&mcasp1_pins>; 

    status = "okay"; 

    op-mode = <0>; /* MCASP_IIS_MODE */ 

    tdm-slots = <2>; 

    num-serializer = <4>; 

    serial-dir = < /* 1 TX 2 RX 0 unused */ 

        2 2 0 0 0 0 0 0 0 0 2 2

      >; 

    rx-num-evt = <4>; 

    tx-num-evt = <4>; 

};

The serial-dir is that way because I use mcasp1_axr0, mcasp1_axr1, mcasp1_10 and mcasp1_axr11 ,those are the ones available in Beaglbone AI. I connected the pins DATA1-MiniDSP, DATA2-MiniDSP, DATA3-MiniDSP and DATA4-MiniDSP in J5(of the CMB) to these pins in my Beaglebone:


P9.18b                               173 fast rx       0 mcasp 0 d0       mcasp@48460000 (mcasp1_pins)
P9.17b                               174 fast rx       0 mcasp 0 d1       mcasp@48460000 (mcasp1_pins)
P9.30                                183 fast rx       0 mcasp 0 d10      mcasp@48460000 (mcasp1_pins)
P9.28                                184 fast rx       0 mcasp 0 d11      mcasp@48460000 (mcasp1_pins)

I also conected DATA1-MiniDSP, LRCLK and BCLK to an external I2S DAC to make a test and I could hear MIC1 and MIC2. So I can assure that outputs are coming in stereo. My problem is that when connect the outputs to Beaglebone and record, I just get 1 of those 2 channels for each DOUT. I checked all of them just in case with the external I2S DAC:

Data 1 is giving MIC1 and MIC2

Data 2 is giving MIC5 and MIC6

Data 3 is giving MIC3 and MIC4

Data 4 is giving MIC7 and MIC8

In case it helps, here is myDummy CODEC:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>

#include <sound/soc.h>

static struct snd_soc_dai_driver pcm5102a_dai = {
	.name = "pcm5102a-hifi",
	.playback = {
		.channels_min = 2,
		.channels_max = 2,
		.rates = SNDRV_PCM_RATE_8000_192000,
		.formats = SNDRV_PCM_FMTBIT_S16_LE |
			   SNDRV_PCM_FMTBIT_S24_LE |
			   SNDRV_PCM_FMTBIT_S32_LE
	},
	.capture = { 

		.stream_name = "Capture", 

		.channels_min = 1, 

		.channels_max = 16, 

		.rates = SNDRV_PCM_RATE_8000_192000, 

		.formats = SNDRV_PCM_FMTBIT_S16_LE | 

			SNDRV_PCM_FMTBIT_S24_LE | 

			SNDRV_PCM_FMTBIT_S32_LE 

	}, 
};

static struct snd_soc_codec_driver soc_codec_dev_pcm5102a;

static int pcm5102a_probe(struct platform_device *pdev)
{
	return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_pcm5102a,
			&pcm5102a_dai, 1);
}

static int pcm5102a_remove(struct platform_device *pdev)
{
	snd_soc_unregister_codec(&pdev->dev);
	return 0;
}

static const struct of_device_id pcm5102a_of_match[] = {
	{ .compatible = "ti,pcm5102a", },
	{ }
};
MODULE_DEVICE_TABLE(of, pcm5102a_of_match);

static struct platform_driver pcm5102a_codec_driver = {
	.probe		= pcm5102a_probe,
	.remove		= pcm5102a_remove,
	.driver		= {
		.name	= "pcm5102a-codec",
		.of_match_table = pcm5102a_of_match,
	},
};

module_platform_driver(pcm5102a_codec_driver);

MODULE_DESCRIPTION("ASoC PCM5102A codec driver");
MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>");
MODULE_LICENSE("GPL v2");

and also my CMB configuration:

uint8_t U1_PCM1864_CONFIG[][2] = { 

{0x00, 0x00}, // Change to Page 0 

{0x01, 0x40}, // PGA CH1_L to 32dB 

{0x02, 0x40}, // PGA CH1_R to 32dB 

{0x03, 0x40}, // PGA CH2_L to 32dB 

{0x04, 0x40}, // PGA CH2_R to 32dB 

{0x05, 0x86}, // Enable SMOOTH PGA Change; Independent Link PGA; 

{0x06, 0x41}, // Polarity: Normal, Channel: VINL1[SE] 

{0x07, 0x41}, // Polarity: Normal, Channel: VINR1[SE] 

{0x08, 0x44}, // Polarity: Normal, Channel: VINL3[SE] 

{0x09, 0x44}, // Polarity: Normal, Channel: VINR3[SE] 

{0x0A, 0x00}, // Secondary ADC Input: No Selection 

{0x0B, 0x44}, // RX WLEN: 24bit; TX WLEN: 24 bit; FMT: I2S format 

{0x10, 0x03}, // GPIO0_FUNC - SCK Out; GPIO0_POL - Normal 

{0x11, 0x50}, // GPIO3_FUNC - DOUT2; GPIO3_POL - Normal 

{0x12, 0x04}, // GPIO0_DIR - GPIO0 - Output 

{0x13, 0x40}, // GPIO3_DIR � GPIO3 - Output 

{0x20, 0x11}  // MST_MODE: Master; CLKDET_EN: Disable 

}; 

  

uint8_t U2_PCM1864_CONFIG[][2] = { 

{0x00, 0x00}, // Change to Page 0 

{0x01, 0x40}, // PGA CH1_L to 32dB 

{0x02, 0x40}, // PGA CH1_R to 32dB 

{0x03, 0x40}, // PGA CH2_L to 32dB 

{0x04, 0x40}, // PGA CH2_R to 32dB 

{0x05, 0x86}, // Enable SMOOTH PGA Change; Independent Link PGA; 

{0x06, 0x41}, // Polarity: Normal, Channel: VINL1[SE] 

{0x07, 0x41}, // Polarity: Normal, Channel: VINR1[SE] 

{0x08, 0x44}, // Polarity: Normal, Channel: VINL3[SE] 

{0x09, 0x44}, // Polarity: Normal, Channel: VINR3[SE] 

{0x0A, 0x00}, // Secondary ADC Input: No Selection 

{0x0B, 0x44}, // RX WLEN: 24bit; TX WLEN: 24 bit; FMT: I2S format 

{0x10, 0x00}, // GPIO0_FUNC – GPIO0; GPIO0_POL - Normal 

{0x11, 0x50}, // GPIO3_FUNC - DOUT2; GPIO3_POL - Normal 

{0x12, 0x00}, // GPIO0_DIR - GPIO0 - Input 

{0x13, 0x40}, // GPIO3_DIR � GPIO3 - Output 

{0x20, 0x01}  // MST_MODE: Slave; CLKDET_EN: Enable 

};

So what is wrong? How can I get all the mics?

  • Sign in to reply
  • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube