From: Oliver Hartkopp <socketcan@hartkopp.net>
To: Wolfgang Grandegger <wg@grandegger.com>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>,
dev@sebastianhaas.info, linux-can@vger.kernel.org
Subject: Re: [RFC] can: Introducing CANFD for af_can & can-raw
Date: Wed, 21 Mar 2012 16:05:28 +0100 [thread overview]
Message-ID: <4F69EE38.9000904@hartkopp.net> (raw)
In-Reply-To: <4F69EC19.7090205@grandegger.com>
On 21.03.2012 15:56, Wolfgang Grandegger wrote:
> Hi,
>
>
> As I see it, the main difference to standard CAN is the bit-rate
> switching for transferring just the data bytes using alternate
> bit-timing parameters.
Yes. You have two sets of bittiming registers one for the normal operation and
for arbitration and the second for the data &crc section in the case of
enabled FD mode.
And in the FD mode you have up to 64 byte payload.
>> I think of some differences:
>> * no RTR allowed.
>> * ESI bit.
>
> Also DLC=9 means 12 bytes, DLC=10 means 16 bytes, DLC=15 means 64 bytes.
> This may even change in the final spec.
Yep!
>
>>> 3. Will these differences be visible in the CAN registers? Is this relevant?
>> Without hardware, it's a bit early to predict. I guess it will be visible, but
>> not relevant since that's driver stuff.
>
> As CANFD controllers also supports CAN2.0 frames, they must provide the
> the relevant information somehow, similar to EFF and SFF.
>
>> I did not get into real drivers yet...
>>>
>>> What i got from the iCC was that when you have a partly migrated network and
>>> you want to run e.g. a fast firmware upload between two CAN FD capable nodes,
>>> the other (standard CAN 2.0b) nodes have to be in listen only mode to not jam
>>> the bus with error frames.
>
> Due to the bit-rate switching, a assume.
Yes - the 'old' controllers would put error frames on the fast payload data.
>
>>> After the firmware upload all the CAN nodes switch back to CAN2.0b mode (which
>>> has to be done by root netlink access).
>> Since CANFD is not bus compatible, the chip must go down & up. It really depends
>> on the chips & drivers to combine CAN2.0 & CANFD.
>> As Marc already suggested, CANFD could be a ctrlmode.
>
> I also see this problem.
>
>>> IMO we need to introduce a new struct canfd_frame
>> IMO we need not to introduce a new struct since they are logically equivalent.
>>
>> I created an old can20b_frame just to compute the sizeof.
>> I'd go for a combined can_frame that could hold both.
>
> Well, I see it as an extension of the standard CAN and therefore I was
> also thinking about an extra "struct canfd_frame". The size is more than
> 3 times larger and we may only allocate the extra space if it's really
> required. I'm also thinking about the impact on queues, etc.
Yes. Additionally we need to have a proper distinction between can_frame and
canfd_frame when we play with recvmmsg in the future.
>
>>> It should be no problem to move to canfd_frame inside the kernel but if we
>>> come to the point that we get to the userspace ABI there should be no tricky
>>> way to check lengths or flags or return values are are not needed to be
>>> checked with the current ABI now.
>>>
>>> When there's a defined socket API that makes use of struct can_frame (like
>>> can_raw, can_bcm, can_gw - but not isotp! \o/ ) we need to
>>>
>>> - duplicate the socket API - like CAN_RAWFD (ugly)
>>> - switch the frame size (e.g. via sockopt)
>>> - a third unknown idea ...
>> When you look at my patch, you can see that only a recompile of candump with
>> the bigger can_frame is all what is between me and a virtual CANFD bus.
>> Candump does not really need to care about the CANFD mode.
>> I think it can do both types of busses as in
>>
>> $ candump any
>
> Well, candump is a simple application and it does not really care about
> the payload. This is different for real legacy application, I think,
> which assumes a payload of 8 bytes only.
My words :-)
>
>>> E.g. when having a CAN FD aware candump/cansend application, it can try to
>>> switch the socket to CAN FD.
>> Since CANFD is a different bus, selecting a bus (like 'can0') implicetely selects
>> the CANFD mode. IMHO, from that point on, there's no difference for candump with
>> a legacy CAN2.0 bus. So why make things complicated.
>
> See above. Also, I think CANFD has been invented to support a fast
> transfer mode for special purposes which will be selected from time to
> time making the bus incompatible with legacy CAN controllers.
>
When you have an entire CAN bus where all nodes support CAN FD this is nice
also. But the current implementation will remain the standard for years too.
>>> on an older kernel that does not support CAN FD ...
>>>
>>> I think it's much more tricky to find a proper solution here.
>> As I mentioned before, I just use CAN_RAW with this. Actually, I just
>> ran a real CAN program that I wrote years ago. It still operates!
>
> Would you program still run if the payload is bigger than 8 bytes?
> I agree with Oliver.
puh. Time for a coffee :-)
Regards,
Oliver
next prev parent reply other threads:[~2012-03-21 15:05 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-21 9:10 [RFC] can: Introducing CANFD for af_can & can-raw Kurt Van Dijck
[not found] ` <E1SAIM4-0007a6-Sf@smtprelay03.ispgateway.de>
2012-03-21 11:05 ` Kurt Van Dijck
2012-03-21 11:43 ` Marc Kleine-Budde
2012-03-21 12:08 ` Kurt Van Dijck
2012-03-21 12:32 ` Marc Kleine-Budde
2012-03-21 12:51 ` Kurt Van Dijck
2012-03-21 13:19 ` Marc Kleine-Budde
2012-03-21 13:21 ` Oliver Hartkopp
2012-03-21 13:53 ` Kurt Van Dijck
2012-03-21 14:49 ` Oliver Hartkopp
2012-03-21 15:26 ` Oliver Hartkopp
2012-03-22 9:03 ` Kurt Van Dijck
2012-03-21 14:56 ` Wolfgang Grandegger
2012-03-21 15:05 ` Oliver Hartkopp [this message]
2012-03-22 9:24 ` Kurt Van Dijck
2012-03-22 9:32 ` Marc Kleine-Budde
2012-03-22 9:38 ` Wolfgang Grandegger
2012-03-22 10:13 ` Kurt Van Dijck
2012-03-23 11:01 ` Wolfgang Grandegger
2012-03-22 9:57 ` Kurt Van Dijck
2012-03-22 10:06 ` Wolfgang Grandegger
2012-03-22 10:35 ` Kurt Van Dijck
2012-03-22 11:00 ` Wolfgang Grandegger
2012-03-22 12:25 ` Oliver Hartkopp
2012-03-22 12:47 ` Kurt Van Dijck
2012-03-21 13:29 ` Alexander Stein
2012-03-21 13:34 ` Kurt Van Dijck
2012-03-21 13:51 ` Marc Kleine-Budde
2012-03-21 15:47 ` Alexander Stein
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F69EE38.9000904@hartkopp.net \
--to=socketcan@hartkopp.net \
--cc=dev@sebastianhaas.info \
--cc=linux-can@vger.kernel.org \
--cc=mkl@pengutronix.de \
--cc=wg@grandegger.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox