OBD-II interface

I would like to make an ODB logger with Arduino, googling I have found a lot of interesting project for this, but I would like to understand better how it works.
Obviously you cant connect Arduino directly to the OBD port of my car, but I need an interface, most of the projects uses the ELM327 interface, I think because it is compatible with all the OBD protocols, whai I am asking is:
If I want connect Arduino only to my car, that has a CAN interface, can I use only the cheaper MCP2551 for the physical layer and a MCP2515 for the protocol?

Yes, you can, but on the software side it's not compatible with the bigger amount of programs for the ELM327 (and compatibles). Sparkfun has a shield (CAN-BUS Shield - DEV-13262 - SparkFun Electronics) with the MCP 2551 and the MCP2515 premounted, you just need a OBD-II cable to connect it to your car.

Thank you,
I have another question, I have read that my car a MINI uses the D-CAN interface for the diagnosis, and other CAN bus for the rest, (i.e. the K-CAN for the bodywork). My question are:

  1. all the CAN bus are equal, they are named D-CAN, K-CAN, F-CAN just to distinguish different signals that travel on these bus, and different protocols.
  2. the ELM327 is able to interface to a D-CAN?
  3. the same for MCP2551 and the MCP2515?
  1. all the CAN bus are equal, they are named D-CAN, K-CAN, F-CAN just to distinguish different signals that travel on these bus, and different protocols.

As far as I know: yes.

  1. the ELM327 is able to interface to a D-CAN?

Yes, but probably not the others (at least not with standard commands).

  1. the same for MCP2551 and the MCP2515?

They should be able to talk to any CAN bus (at least they're specified so), your problem is probably how to physically get access to all other than the diagnostic bus (that one is on the OBD-II interface).

Thanks I will try, at now access to the diagnostic CAN should be enough for a logger.