E90 Most and React CarPlay

Hello! First off, THANK YOU for creating this MOST hat. This is allowing me to refine my custom head unit for my 2010 E90 and eliminate the analog to MOST encoding box that I am currently using. I have a question: Do you happen to know the Source Address High and Source Address Low? Or, since I believe you also have an E90, what are the values that should be filled in to use the factory amp with react-carplay? I looked in the thread with the vehicle info, but there is no listing for Source high and low, which react-carplay wants. No matter what I put in there and hit save, if I close the app and restart, its back to unchecked and values empty,

Hi!,

I don’t have an E90, @ygoz does. From the vehicle details post, this should work, I have messed up the naming I guess in the app, it should really be sink! But source Address high should be 0x01, source address low should be 0x01, instance should be 0x01 and sink number should be 0x02, and Fblock should be 0x22. The MOST part is still very beta in the app, however I do use it daily with no issues. I am not sure why tick box would be unticking, how are you writing the numbers in? As in the format of the numbers, you could try both in hex format as above or in decimal format

Sink Type Device Address Instance ID Sink Number
Main Audio Amplifier 0x0101 0x01 2

Thank you for your swift reply. I have put in the supplied values, and I figured out the issue with the non save. My CarPlay screen resolution is 1280x480, not tall enough to see the bottom buttons, using a mouse with a scroll wheel, I am able to scroll to the bottom and save. However, following the instructions on the piMOST GitHub, I have no sound, I get nothing when I do arecord -l. I have a BMW logic 7 plugged into it. The PI doesn’t see the sound card at all.

can you post the the contents of /etc/pulse/daemon.conf and also `/boot/overlays/ and also what version of pi and OS are you using?

It won’t allow me to upload anything saying new users are not allowed to upload, so here is everything pasted in:

This is a RPI 5, 8GB running:

No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 12 (bookworm)
Release:	12
Codename:	bookworm

daemon.conf:

# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for
## more information. Default values are commented out.  Use either ; or # for
## commenting.

; daemonize = no
; fail = yes
; allow-module-loading = yes
; allow-exit = yes
; use-pid-file = yes
; system-instance = no
; local-server-type = user
; enable-shm = yes
; enable-memfd = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
; lock-memory = no
; cpu-limit = no

; high-priority = yes
; nice-level = -11

; realtime-scheduling = yes
; realtime-priority = 5

; exit-idle-time = 20
; scache-idle-time = 20

; dl-search-path = (depends on architecture)

; load-default-script-file = yes
; default-script-file = /etc/pulse/default.pa

; log-target = auto
; log-level = notice
; log-meta = no
; log-time = no
; log-backtrace = 0

; resample-method = speex-float-1
; avoid-resampling = false
; enable-remixing = yes
; remixing-use-all-sink-channels = yes
; remixing-produce-lfe = no
; remixing-consume-lfe = no
; lfe-crossover-freq = 0

; flat-volumes = no

; rescue-streams = yes

; rlimit-fsize = -1
; rlimit-data = -1
; rlimit-stack = -1
; rlimit-core = -1
; rlimit-as = -1
; rlimit-rss = -1
; rlimit-nproc = -1
; rlimit-nofile = 256
; rlimit-memlock = -1
; rlimit-locks = -1
; rlimit-sigpending = -1
; rlimit-msgqueue = -1
; rlimit-nice = 31
; rlimit-rtprio = 9
; rlimit-rttime = 200000

; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 48000
; default-sample-channels = 2
; default-channel-map = front-left,front-right

; default-fragments = 4
default-fragment-size-msec = 15

; enable-deferred-volume = yes
; deferred-volume-safety-margin-usec = 8000
; deferred-volume-extra-delay-usec = 0

default-sample-format = s16le
default-sample-rate = 44000
alternate-sample-rate = 44000
default-sample-channels = 2
default-channel-map = front-left,front-right

files in /boot/overlays:

allan@Nyomi:~ $ ls /boot/overlays

act-led.dtbo                            i2c5.dtbo                       rpi-codeczero.dtbo
adafruit18.dtbo                         i2c6.dtbo                       rpi-dacplus.dtbo
adafruit-st7735r.dtbo                   i2c-bcm2708.dtbo                rpi-dacpro.dtbo
adau1977-adc.dtbo                       i2c-fan.dtbo                    rpi-digiampplus.dtbo
adau7002-simple.dtbo                    i2c-gpio.dtbo                   rpi-ft5406.dtbo
ads1015.dtbo                            i2c-mux.dtbo                    rpi-poe.dtbo
ads1115.dtbo                            i2c-pwm-pca9685a.dtbo           rpi-poe-plus.dtbo
ads7846.dtbo                            i2c-rtc.dtbo                    rpi-sense.dtbo
adv7282m.dtbo                           i2c-rtc-gpio.dtbo               rpi-sense-v2.dtbo
adv728x-m.dtbo                          i2c-sensor.dtbo                 rpi-tv.dtbo
akkordion-iqdacplus.dtbo                i2s-dac.dtbo                    rra-digidac1-wm8741-audio.dtbo
allo-boss2-dac-audio.dtbo               i2s-gpio28-31.dtbo              sainsmart18.dtbo
allo-boss-dac-pcm512x-audio.dtbo        ilitek251x.dtbo                 sc16is750-i2c.dtbo
allo-digione.dtbo                       imx219.dtbo                     sc16is752-i2c.dtbo
allo-katana-dac-audio.dtbo              imx258.dtbo                     sc16is752-spi0.dtbo
allo-piano-dac-pcm512x-audio.dtbo       imx290.dtbo                     sc16is752-spi1.dtbo
allo-piano-dac-plus-pcm512x-audio.dtbo  imx296.dtbo                     sdhost.dtbo
anyspi.dtbo                             imx327.dtbo                     sdio.dtbo
apds9960.dtbo                           imx378.dtbo                     sdio-pi5.dtbo
applepi-dac.dtbo                        imx462.dtbo                     seeed-can-fd-hat-v1.dtbo
arducam-64mp.dtbo                       imx477.dtbo                     seeed-can-fd-hat-v2.dtbo
arducam-pivariety.dtbo                  imx519.dtbo                     sh1106-spi.dtbo
at86rf233.dtbo                          imx708.dtbo                     si446x-spi0.dtbo
audioinjector-addons.dtbo               iqaudio-codec.dtbo              smi-dev.dtbo
audioinjector-bare-i2s.dtbo             iqaudio-dac.dtbo                smi.dtbo
audioinjector-isolated-soundcard.dtbo   iqaudio-dacplus.dtbo            smi-nand.dtbo
audioinjector-ultra.dtbo                iqaudio-digi-wm8804-audio.dtbo  spi0-0cs.dtbo
audioinjector-wm8731-audio.dtbo         iqs550.dtbo                     spi0-1cs.dtbo
audiosense-pi.dtbo                      irs1125.dtbo                    spi0-2cs.dtbo
audremap.dtbo                           i-sabre-q2m.dtbo                spi1-1cs.dtbo
balena-fin.dtbo                         jedec-spi-nor.dtbo              spi1-2cs.dtbo
camera-mux-2port.dtbo                   justboom-both.dtbo              spi1-3cs.dtbo
camera-mux-4port.dtbo                   justboom-dac.dtbo               spi2-1cs.dtbo
cap1106.dtbo                            justboom-digi.dtbo              spi2-1cs-pi5.dtbo
chipdip-dac.dtbo                        ltc294x.dtbo                    spi2-2cs.dtbo
cirrus-wm5102.dtbo                      max98357a.dtbo                  spi2-2cs-pi5.dtbo
cma.dtbo                                maxtherm.dtbo                   spi2-3cs.dtbo
cm-swap-i2c0.dtbo                       mbed-dac.dtbo                   spi3-1cs.dtbo
crystalfontz-cfa050_pi_m.dtbo           mcp23017.dtbo                   spi3-1cs-pi5.dtbo
cutiepi-panel.dtbo                      mcp23s17.dtbo                   spi3-2cs.dtbo
dacberry400.dtbo                        mcp2515-can0.dtbo               spi3-2cs-pi5.dtbo
dht11.dtbo                              mcp2515-can1.dtbo               spi4-1cs.dtbo
dionaudio-kiwi.dtbo                     mcp2515.dtbo                    spi4-2cs.dtbo
dionaudio-loco.dtbo                     mcp251xfd.dtbo                  spi5-1cs.dtbo
dionaudio-loco-v2.dtbo                  mcp3008.dtbo                    spi5-1cs-pi5.dtbo
disable-bt.dtbo                         mcp3202.dtbo                    spi5-2cs.dtbo
disable-bt-pi5.dtbo                     mcp342x.dtbo                    spi5-2cs-pi5.dtbo
disable-emmc2.dtbo                      media-center.dtbo               spi6-1cs.dtbo
disable-wifi.dtbo                       merus-amp.dtbo                  spi6-2cs.dtbo
disable-wifi-pi5.dtbo                   midi-uart0.dtbo                 spi-gpio35-39.dtbo
dpi18cpadhi.dtbo                        midi-uart0-pi5.dtbo             spi-gpio40-45.dtbo
dpi18.dtbo                              midi-uart1.dtbo                 spi-rtc.dtbo
dpi24.dtbo                              midi-uart1-pi5.dtbo             ssd1306.dtbo
draws.dtbo                              midi-uart2.dtbo                 ssd1306-spi.dtbo
dwc2.dtbo                               midi-uart2-pi5.dtbo             ssd1331-spi.dtbo
dwc2-pi5.dtbo                           midi-uart3.dtbo                 ssd1351-spi.dtbo
dwc-otg.dtbo                            midi-uart3-pi5.dtbo             superaudioboard.dtbo
edt-ft5406.dtbo                         midi-uart4.dtbo                 sx150x.dtbo
enc28j60.dtbo                           midi-uart4-pi5.dtbo             tc358743-audio.dtbo
enc28j60-spi2.dtbo                      midi-uart5.dtbo                 tc358743.dtbo
exc3000.dtbo                            minipitft13.dtbo                tinylcd35.dtbo
fbtft.dtbo                              miniuart-bt.dtbo                tpm-slb9670.dtbo
fe-pi-audio.dtbo                        mipi-dbi-spi.dtbo               tpm-slb9673.dtbo
fsm-demo.dtbo                           mlx90640.dtbo                   uart0.dtbo
gc9a01.dtbo                             mmc.dtbo                        uart0-pi5.dtbo
ghost-amp.dtbo                          mpu6050.dtbo                    uart1.dtbo
goodix.dtbo                             mz61581.dtbo                    uart1-pi5.dtbo
googlevoicehat-soundcard.dtbo           ov2311.dtbo                     uart2.dtbo
gpio-charger.dtbo                       ov5647.dtbo                     uart2-pi5.dtbo
gpio-fan.dtbo                           ov64a40.dtbo                    uart3.dtbo
gpio-hog.dtbo                           ov7251.dtbo                     uart3-pi5.dtbo
gpio-ir.dtbo                            ov9281.dtbo                     uart4.dtbo
gpio-ir-tx.dtbo                         overlay_map.dtb                 uart4-pi5.dtbo
gpio-key.dtbo                           papirus.dtbo                    uart5.dtbo
gpio-led.dtbo                           pca953x.dtbo                    udrc.dtbo
gpio-no-bank0-irq.dtbo                  pcf857x.dtbo                    ugreen-dabboard.dtbo
gpio-no-irq.dtbo                        pcie-32bit-dma.dtbo             upstream.dtbo
gpio-poweroff.dtbo                      pibell.dtbo                     upstream-pi4.dtbo
gpio-shutdown.dtbo                      pifacedigital.dtbo              vc4-fkms-v3d.dtbo
hat_map.dtb                             pifi-40.dtbo                    vc4-fkms-v3d-pi4.dtbo
hd44780-lcd.dtbo                        pifi-dac-hd.dtbo                vc4-kms-dpi-generic.dtbo
hdmi-backlight-hwhack-gpio.dtbo         pifi-dac-zero.dtbo              vc4-kms-dpi-hyperpixel2r.dtbo
hifiberry-amp100.dtbo                   pifi-mini-210.dtbo              vc4-kms-dpi-hyperpixel4.dtbo
hifiberry-amp3.dtbo                     piglow.dtbo                     vc4-kms-dpi-hyperpixel4sq.dtbo
hifiberry-amp.dtbo                      piMost48KhzStereo.dtbo          vc4-kms-dpi-panel.dtbo
hifiberry-dac.dtbo                      piscreen2r.dtbo                 vc4-kms-dsi-7inch.dtbo
hifiberry-dacplusadc.dtbo               piscreen.dtbo                   vc4-kms-dsi-generic.dtbo
hifiberry-dacplusadcpro.dtbo            pisound.dtbo                    vc4-kms-dsi-lt070me05000.dtbo
hifiberry-dacplusdsp.dtbo               pitft22.dtbo                    vc4-kms-dsi-lt070me05000-v2.dtbo
hifiberry-dacplus.dtbo                  pitft28-capacitive.dtbo         vc4-kms-dsi-waveshare-panel.dtbo
hifiberry-dacplushd.dtbo                pitft28-resistive.dtbo          vc4-kms-kippah-7inch.dtbo
hifiberry-digi.dtbo                     pitft35-resistive.dtbo          vc4-kms-v3d.dtbo
hifiberry-digi-pro.dtbo                 pps-gpio.dtbo                   vc4-kms-v3d-pi4.dtbo
highperi.dtbo                           proto-codec.dtbo                vc4-kms-v3d-pi5.dtbo
hy28a.dtbo                              pwm1.dtbo                       vc4-kms-vga666.dtbo
hy28b-2017.dtbo                         pwm-2chan.dtbo                  vga666.dtbo
hy28b.dtbo                              pwm.dtbo                        vl805.dtbo
i2c0.dtbo                               pwm-ir-tx.dtbo                  w1-gpio.dtbo
i2c0-pi5.dtbo                           qca7000.dtbo                    w1-gpio-pullup.dtbo
i2c1.dtbo                               qca7000-uart0.dtbo              w5500.dtbo
i2c1-pi5.dtbo                           ramoops.dtbo                    watterott-display.dtbo
i2c2-pi5.dtbo                           ramoops-pi4.dtbo                waveshare-can-fd-hat-mode-a.dtbo
i2c3.dtbo                               README                          waveshare-can-fd-hat-mode-b.dtbo
i2c3-pi5.dtbo                           rotary-encoder.dtbo             wittypi.dtbo
i2c4.dtbo                               rpi-backlight.dtbo              wm8960-soundcard.dtbo

ok, couple of things, inside of pulse daemon, I think it needs to be 44100 instead of 44000.

Also I think on bookworm you need to change the audio service to pulseAudio. This is done in raspi-config.

You should then be able to get the card and device number from arecord -l (probably after a reboot)

Let me know if it doesn’t work and I will image a fresh pi5, just to double check you ran and built the dts file for the pi5 not the pi folder?

Yes, I used the pi5 dts. I’ve de-installed pulse, reinstalled pulse, no matter what I do, it does not see a card. It sees my 2 video captures cards… (I am using 2 usb video sticks for front and rear cameras). but no other sound cards:

allan@Nyomi:~ $ arecord -l

**** List of CAPTURE Hardware Devices ****
card 2: MS210x [MS210x], device 0: USB Audio [USB Audio]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 3: MS210x_1 [MS210x], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

If you wouldn’t mind imaging a working install, that would be great!

Have you set the OS to use pulse? since bookworm out of the box it uses PipeWire rather than pulseaudio, you can change it in raspi-config

Yes, unfortunately I did try that already. I’ve even de-installed and re-installed pulse. I am using the Raspberry PI imager to prepare, format, etc the boot disk if that makes any difference?

I just tried a new card, fresh install, step by step instructions, same result. It sees no audio device. When I run the messaging test, it does say ‘connected’ after a few tries. It sees the canbus device, I can initialize that device no problem as well, it just sees no audio card…

step by step:

1.) new card, using RPI imager, installed bookworm 64 bit to card
2.) Boot card, apt update/upgrade
3.) Using Raspi-config, switch to pulse, reboot
4.) Clone repo, follow instructions (using RPI5 overlay)

Nothing :frowning:

It may be something has changed with the update.

Can you post the output of

dmesg | grep i2s

It shows zero output. it’s enabled in /etc/firmware/config.txt though. If I try to manually apply the overlay:

allan@Nyomi:~ $ sudo dtoverlay piMost48KhzStereo
* Failed to apply overlay '0_piMost48KhzStereo' (kernel)

dmesg shows:

[  173.844213] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/sound/compatible
[  173.844226] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/sound/simple-audio-card,name
[  173.844230] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/sound/status

Update:

I found the board where you were speaking with someone regarding clocks :slight_smile: I also see that there are numerous issues with the RPI5 and i2s sound… following advice from another post, I did an rpi-update and got this, one time:

[    3.595147] designware-i2s 1f000a4000.i2s: ASoC: error at snd_soc_dai_set_tdm_slot on 1f000a4000.i2s: -22
[    3.595159] designware-i2s 1f000a4000.i2s: simple-card: set_tdm_slot error
[    3.595161]  1f000a4000.i2s-dit-hifi: ASoC: error at snd_soc_link_init on 1f000a4000.i2s-dit-hifi: -22

Additional Update:

I have decided to rip my head unit apart and use an RPi4 to see if the MOST works. It does. The issue most (no pun intended) definitely lies in the pi5 config. I would REALLY love to use the 5. Switching to the 4 is very much noticeable in boot time, system response time, etc. But at least I think I’ve narrowed it down :slight_smile:

I have 1 final ‘problem’ that perhaps you, or @ygoz might know the answer to (I hope):

On my test bench, I have a BMW logic 7 amp plugged directly into the piMOST. I have pins 1 and 2 on the MOST interface on the L7 amp shorted so it wakes up the MOST on the amp immediately, but I cannot get a lock on the network. I have updated everything from 48 to 44.1 kHz. I noticed that the amp wakes up, light is on, but then after approx 20 or 30 seconds, the light goes off. When I check status of the service, the messages state that the network is unlocked and then status is lost.

I currently am using this setup with v1 of my headunit, but that headunit is utilizing an aftermarket RCA to MOST little decoder box. Config in the car is as such:

Headunit → MOST decoder box → L7 amp

I suspect that this decoder box is supplying a ‘master’ clock signal. Are you aware of a way to either put the piMOST into master, or provide the network clock? The entire point of this exercise for me was to eliminate that little black box lol. There is nothing else in the car plugged into this MOST network, I have removed the combo box from the car. Any ideas? Thank you for your time so far!

Thanks for all the feedback! It will be back to working on a pi5 I just need to get the time to figure out what has changed in the latest update.

As for master mode this is something that hasn’t been explored at all so there is zero functionality available within drivers, however at some point in the future it would be something to add, however there are alot more functions that will likely be implemented first.

What is the decoder box doing and why does it need to be removed? You can hijack the streams using the pimost to be able to send what you want. It would be great to get a bit more detail on what it is you are looking to achieve!

For the error after your update, would you mind sharing your .dts file, just want to check nothing has changed. The incorrect slot width is where it should be saying 16.

Of course. I am available anytime for a call or Skype, etc. I can explain and show you what I am doing. it would be very much easier than trying to lay it all out here. I can also give you ssh access to the pi if you wish so you can poke around and retrieve whatever you like. I’m in the US, and I’m usually up until 4am PST at the least. I’ve been a developer my entire life, I’m just wired to be up all night :slight_smile: Anytime you are available for 5 minutes to have this quick chat, I can make time.

@azabecki alright the issue was a pretty simple one, or should I say a “simpale” one :rofl:

Oh wow… attack of the typos! Ok, I’m formatting a fresh card to start over and I’ll report back shortly! Thank you very much for looking into this. I have a silly question though: I tried it with my pi4, it saw the card, etc. but I have no sound. I have the correct values in the piMOST screen. I have yet to see the light on the piMOST activate… is that correct? For example, the fiber light on the amp comes on, and after about 30 seconds, it turns off. The piMOST at no time flashes the LED…

If you are looking at the back of the transceiver on the pimost which light comes on? left or right? Is this straight after applying power? And do you have a master on the network?

Sorry for the bunch of questions, but unless sync to the input is achieved, the light won’t show.