按aw-ol的这个帖子修改的。
之前用的mango sdk,也是按这个修改后,can功能可以正常使用。这次用了tina linux 2.1,结果按帖子配置后,配置can波特率失败。
https://bbs.aw-ol.com/topic/1383/t113-s3-can%E6%A8%A1%E5%9D%97%E4%BD%BF%E7%94%A8%E7%9A%84%E5%85%A8%E9%83%A8%E4%BF%A1%E6%81%AF
root@TinaLinux:/# ip link set can0 type can bitrate 100000
[77081.499110] sunxi_can 2504400.can can0: 0-3343301252-0
[77081.504850] sunxi_can 2504400.can can0: bitrate error 100.0% too high
RTNETLINK answers: Domain error
在drive/net/can/dev.c里的
static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt, const struct can_bittiming_const *btc)
函数里找到了对应报错信息:
188 if (bitrate_error > CAN_CALC_MAX_ERROR) {
1 netdev_err(dev, "%u-%u-%u\n", bitrate, bt-bitrate, priv->clock.freq); //any
2 netdev_err(dev,
3 "bitrate error %d.%d%% too high\n",
4 bitrate_error / 10, bitrate_error % 10);
5 return -EDOM;
6 }
结果priv->clock.freq是0.
我觉得可能是没打开can时钟,那么,在哪里打开呢?
最近编辑记录 Gentlepig (2023-07-19 09:17:27)
离线
linux-5.4/drivers/clk/sunxi-ng/ccu-sun8iw20.c
该文件里, 缺少这几行:
static SUNXI_CCU_GATE(bus_can0_clk, "bus-can0", "apb1", 0x92c, BIT(0), 0);
static SUNXI_CCU_GATE(bus_can1_clk, "bus-can1", "apb1", 0x92c, BIT(1), 0);
&bus_can0_clk.common,
&bus_can1_clk.common,
在mango sdk里,是默认就有这些的。
注意,修改后,再mp,结果还是会报同样的错误,但是在linux目录下make clean后,然后顶层目录下mp就没事了。
最近编辑记录 Gentlepig (2023-07-20 15:23:16)
离线