Datalogging on BMW S1000RR/R 2013-2018

edited June 2020 in DIY builds
Hi, I'm trying to set up OBD datalogging on my 2016 BMW S1000R. As far as I know, the motorcycle does not support classic OBD-II, however the messages on the BUS should be similar to OBD.
I have Android 10 and an OBDLINK Bluetooth dongle.
The setup works in general, as I was able to view live data via an app calles "MotoScan".
But I didn't manage to get any logging with RaceChrono nor was I able to view live data via Torque.

In RaceChrono I tried all standard protokolls with activated "fast" or "slow" channels.
I tried non-standard OBD-II
I tried "add channel" and rebuilt some OBD messages.
But whatever I try, as I start the session, instead of showing live data it only says "waiting for data" and nothing happens.

Does anybody have a solution or maybe already managed to get it running for a BMW motorcycle?

I post my debug-logs if thats any good.

Greetings and thank you in advance


  • edited June 2020
    As far as I know the S1000RR does not support OBD-II. It does have CAN-BUS, which is also supported by RaceChrono. 

    Here's how to use the CAN-BUS feature with OBDLink readers with RaceChrono: 

    1) Enable "RaceChrono > Settings > Expert settings > Experimental devices" 

    2) Add a CAN-Bus recording device "RaceChrono > Settings > Add other device > OBDLink LX/MX/MX+ Bluetooth (CAN-Bus)", and then select your OBDLink device. Notice this will NOT work on any other reader. Also it will NOT work if you add the OBDLink with "Add OBD-II reader", you need to use the "Add other device" to add the reader specifically as a CAN-Bus device.

    3) You can now add CAN-Bus channels to the vehicle profile.  

    4) In the channel editor:
    - Channel and Channel postfix field defines how the channel shows up in your RaceChrono sessions
    - Source data field is data for testing your equations
    - PID field defines which CAN-Bus message has the information. 
    - The equation field defines where the channel data is located in the message, and how it is translated to actual channel values. The equations are explained here:

    The equations are proprietary for each manufacturer, and often they vary between vehicle models too. The S1000RR CAN-Bus messages have been reverse engineered already, and the message formats are described in this document:

    Translating this documentation to RaceChrono equations is perfectly doable, but requires some knowing some basic computer science methodology like bits and bytes.

  • edited June 2020

    Thank you for your support. With the linked spreadsheet it is clear what to do.

    As a test I created a custom PID for RPM
    From the Spreadsheet:
    PID: 10C(h) or 268
    (Byte2 + Byte3(Low Nibble) * 255) * 5

    In Racechrono:
    PID Field = 268
    (bitstouint(raw,16,8) + bitstouint(raw,28,4) * 255) * 5

    I guess this should work, but unfortunately I'm unable to receive data when I start the session, it just says "waiting for data".

    What confuses me most, is the fact that when I choose "test connection" in the settings or start the session and look at the connection, it connects to my OBDLink but most of the time I only get lik 0,1 kbit/s.
    SOMETIMES I get changeing datarates arround 100 to 200 kbit/s. But I don't know why.
    But still, there is no datalogging.
    Furthermore I cannot check the box for "live data" in the Custom PID Screen.

    Any help or advice would be really great. Thank you very much!
  • edited July 2020
    Hi, is your bike running when you do this? There could me multiple reasons why this happens, but sounds like there's no messages from the bus with this PID. You could try to use a terminal app to connect to the reader, and see what's going on with your bus.


    Reset device:

    Set protocol:
    ATSPn (Where n is protocol number, same as in RaceChrono settings. Start with ATSP0 for automatic protocol selection)

    Monitor CAN-BUS messages:

    You should see all messages from your bus. Make a note which PIDs you're seeing. These are the ones you can configure in RaceChrono.

  • hi, today i was trying to get data on my s1000rr 2015, with an obdlink lx, but there was no way. It connects via obd can bus, I test the connection and fine, but within the session it does not open any channel or receive data. I was looking at the table of the previous link in this post, but I am unable to put the channels manually and then read them. Has anyone got it? thanks.

  • There is something that I do not understand.

    when I connect the obdlink lx and put the motoscan, I can read data in real time of rpm, throttle position, ... that is, if it send that data, it should be possible to extract the same for the racechrono.

    Do you know if they sell any cable that plugs into the canbus connector where the aim solo2 dl is plugged in, that transforms from canbus to obd? or would someone know how to do it? thanks.

    Enviado desde mi Mi 9T Pro mediante Tapatalk

  • Alguna ayuda @aol ??

    Lo conseguiste @Schnellfahren ?

  • edited October 2020
    The connection can be established without defining the channels, but the channels need to be configured correctly to get any data. I do not have BMW S1000R myself, so I cannot give the correct equations for the channels. The other app probably has a profile for your bike, with all the channels already configured. RaceChrono does not have any already made profiles.
  • @Yodoc86 No. I'm wondering if the CAN Messages are MSB oder LSB and how I could transpose the Bit Vector of each signal.
    I'll figure it out eventually, but I'm so busy atm that I barely have time to test it.
    Maybe a wonder occurs and someone reads this post and can give an working example/tutorial.

  • edited April 2021
    Today I tryed to log the ambient temperature (ID: 3FA). This ist the .obd file for the session. I think the temperature is sent every 5 seconds, so something must be correct at least :). But during the session it only said: "waiting for Data". Should there be any Data logged in this file?
    STFAP 3FA, 7FF. Is this a Mask? Why 7FF?
    @aol Can you see any Problems?

    <--18:34:39.638 OUT-->ATZ\r
    <--18:34:41.502 IN -->\r\rELM327 v1.3a\r\r>
    <--18:34:41.503 OUT-->ATE0\r
    <--18:34:43.536 IN -->ATE0\rOK\r\r>
    <--18:34:43.537 OUT-->ATL0\r
    <--18:34:43.545 IN -->OK\r\r>
    <--18:34:43.546 OUT-->ATSP0\r
    <--18:34:44.591 IN -->OK\r\r>
    <--18:34:44.591 OUT-->ATS0\r
    <--18:34:44.600 IN -->OK\r\r>
    <--18:34:44.600 OUT-->ATH1\r
    <--18:34:44.608 IN -->OK\r\r>
    <--18:34:44.608 OUT-->STM\r
    <--18:34:44.619 IN -->SEARCHING...\r
    <--18:34:49.623 OUT-->\r
    <--18:34:49.653 IN -->\r>
    <--18:34:49.654 OUT-->STFCP\r\r
    <--18:34:49.662 IN -->OK\r\r>
    <--18:34:49.663 OUT-->STFAP 3FA,7FF\r
    <--18:34:49.672 IN -->OK\r\r>
    <--18:34:49.672 OUT-->STM\r
    <--18:34:54.675 OUT-->\r
    <--18:34:54.729 IN -->\r>
    <--18:34:54.729 OUT-->STM\r
    <--18:34:59.735 OUT-->\r
    <--18:34:59.775 IN -->\r>
    <--18:34:59.776 OUT-->STM\r
    <--18:35:04.778 OUT-->\r
    <--18:35:04.808 IN -->\r>
    <--18:35:04.808 OUT-->STM\r
  • edited April 2021
    @Schlo Communication looks correct for a CAN-Bus PID that's not transmitted in the bus. The 0x7FF is mask to include only the packets with PID 0x3FA.

    Can you use a Bluetooth terminal app to connect to the reader? If so try ATZ and then STM. Both commands should be followed by an enter. It should output all packets received from the bus, so you can see which PIDs should be working.
  • @aol Is there a terminal app you can recommend? I searched but was unable to find a working one. Android or Windows.
    I have the OBDLINK LX dongle.
  • @aol I used "Serial Bluetooth Terminal" App for Android.
    ATZ^M^M^MELM327 v1.3a^M^M

    Seems like there are no Messages on the BUS by default. Maybe you have to trigger them via a diagnoses job or something, since I can perfectly read and write with "Moto Scan" app.
    Any idea how to manage that?
  • No, the bus should have all the messages between your ECU and dash for example. RaceChrono is not getting the CAN ERROR so I think it's intermittent.
  • edited May 2021
    @Yodoc86 It finally works.
    I have to appologize for my mistake (a stupid one) and the trouble I caused. Thanks @aol for your patience and help.
    I want to contribute to my fellow S1000R/RR Drivers out there, who are interessted in Data logging via RaceChrono.

    My supid mistake:
    I used the 9 pin round connector located in the back of the S1000R (2016) to connect to the OBDLINK LX Blutooth device. With the Motoscan app I can read some data of the ECUs and I can also progam the ECUs. However, THIS IS NOT A CAN BUS. The connection is established through k-line and l-line.
    Here is a link so it is clear what I mean.
    I don't know the protocol, but it's not compatible with RaceChrono (no CAN BUS, no OBD2, no OBD2 like connection)

    So here is how it works. You have to find a CAN BUS to connect to. I used the spare plug of the anti-theft-alarm-system.
    Here is a website, where you can see the pin-out of the connector.

    Make sure to connect it to the right pins of your OBD2 logger.
    PIN 16: 12V
    PIN 4: Vehicle Ground
    PIN 6: CAN High
    PIN 14: CAN Low

    Follow the steps on how to set up your device as a CAN Bus logger on the race chrono website.

    Find the right Messages you want to log with this spreadsheet.

    Look up the equations for RaceChrono Data Logging.

    Add the CAN BUS Channel in Racechrono. For example:
    Intake Air Temperature
    Parameter ID: 1018
    Equation: bitstouintraw(raw, 0,8) * 0.75 - 48

    I hope this helps.
  • @aol was just reading this thread and noticed your link to the BMW google drive which is amazing! It got me thinking since @TriB has done alot of work on Kawasaki and Suzuki (I'm working on some more in depth Suzuki with @TriB right now) that we should have a sticky in the DIY section with links to custom pids for each MFR. I was searching online and found a bunch of Auto MFR custom pids as well which I could add to a sticky like that so that people can search easily in one thread for the links.
  • @Michael86 Sure we can do that. Please start a new thread, and then let's link model specific threads to it. I'm highly interested on the PIDs that you found too :)
  • @aol will do. Headed on vacation but will make a post soon!
  • @Michael86 I strongly suggest NOT using a forum thread to document all the possible links. It will get unmanageable/unreadable once you post ~10 links.

    I feel a Wiki-like format would be a lot more useful, as others can correct/update things, not just "add a the end".
    If you're familiar with how to work with git / GitHub, feel free to send pull requests to add more info here:
  • Hello!
    Tell me, did you manage to make equations? I don’t understand how to write these equations at all, although I read the instructions.
    I find it easier to take the bike apart and put it back together again.
    Or maybe someone has ready-made equations for the BMW S1000RR?
    We need - speed, throttle, accelerator, and the main start of pressing the brake and, if possible, effort.
  • @Igorka The S1000R/RR/XR canbus PIDs is already documented in detail in the first post by aol

    I have a similar document that has specific corrections for the S1000XR.

    On the 4th tab, I have Racechrono equations that you can reference / modify for the S1000RR

  • Thanks a lot! I'm waiting for the OBD MX+ to arrive and I'll try it!
  • Hey! received obd mx + but reyschrono writes that it is connected and waiting. above it was written that there is no CAN signal on the standard plug. I checked the contacts there just they are responsible for CAN. Try to connect to the plug from the alarm?
  • edited December 2022

    The diagnostic plug is not connected to the main canbus network.

    The easiest location to connect to the main network is the alarm plug. Schlo lists exact pin numbers + documentation in his post.

  • I have 17 years old, there is already a normal obd
  • as I understand it, there is some kind of filtering data, and i need to look for the dignity in the plug from the alarm?
  • Hello to all! I got it all. The CAN bus is only on the plug from the alarm. there is no good CAN signal on the standard plug. And thanks for the racechrono equation, it works! it remains to wait for the details for the tire temperature sensor and there will be full telemetry!
  • Check out @MagnusThome's RejsaRubberTrac project for tire temperature.

    Less than $50 per tire to get full temperature and suspension travel telemetry @ >10 Hz
  • Yes, I will use this as a guide!
    I bought all the spare parts, I'm waiting for them to arrive and start assembling
Sign In or Register to comment.