Quantex GmbH
您的地区:欧洲

ELM327 开发者指南

什么是 ELM327?

ELM327 是一种基于 AT 命令的文本交互协议,最初为 ELM Electronics 公司的同名 OBD 解释器而开发。由于其简单性,它已成为 OBD-II 诊断的事实标准,并被绝大多数诊断应用程序和库所支持。

ScanDoc 适配器实现了 ELM327 v2.3,并配备扩展命令集,其中包括对 DoIP (Diagnostics over IP) 的支持,可用于现代汽车的以太网诊断。

工作原理

数据交互通过串行接口(WLAN、BLE 或 USB)进行。命令以 ASCII 文本形式发送,并以回车符(CR,0x0D)结尾。适配器以结果作为响应,随后是提示符 >

共有两类命令:


交互示例:BMW(CAN 扩展寻址)

BMW 汽车使用 CAN 扩展寻址(CAN Extended Addressing),即 CAN 帧数据的第一个字节包含目标 ECU 的地址。下面给出一个真实的诊断会话示例。

// --- 初始化适配器 ---

>ATZ                        // 完全复位适配器
ELM327 v2.3

>ATE0                       // 关闭回显
OK
>ATS0                       // 关闭响应中的空格
OK
>ATH1                       // 在响应中包含报头
OK
>ATL0                       // 关闭换行
OK
>ATAL                       // 允许长消息(>7 字节)
OK
>ATAT0                      // 关闭自适应定时
OK
>ATSTff                     // 最大超时(FF × 4 毫秒 ≈ 1 秒)
OK

// --- 为 BMW 配置 CAN 协议 ---

>ATPBC101                   // 协议 B:C1 = 11 位 ID + ISO 15765,01 = 500 kBaud
OK
>ATSPB                      // 选择协议 B(USER1 CAN)
OK
>ATBI                       // 跳过初始化(BMW 不使用标准 OBD 初始化)
OK
>ATSH6F1                    // CAN 发送 ID = 0x6F1(BMW 测试仪地址)
OK

// --- Flow Control 与扩展寻址 ---

>ATFCSH6F1                  // Flow Control 报头 = 0x6F1
OK
>ATFCSD4030FF32             // FC 数据:40=ECU 地址,30=CTS,FF=无限制,32=50 毫秒
OK
>ATFCSM1                    // FC 模式 = 1(完全用户自定义)
OK
>ATCRA640                   // 接收 CAN ID = 0x640 的响应
OK
>ATCEA40                    // CAN 扩展地址 = 0x40(ECU 地址)
OK

// --- 向地址 0x40 的 ECU 发出请求 — 无响应 ---

>1A80                       // 服务 0x1A(Read ECU Identification),参数 0x80
NO DATA
>22F150                     // UDS:服务 0x22(ReadDataByIdentifier),DID=F150
NO DATA

// --- 切换到地址 0x10 的 ECU ---

>ATFCSD1030FF32             // FC 数据:ECU 地址 = 0x10
OK
>ATFCSM1                    // FC 模式 = 1
OK
>ATCRA610                   // 接收 CAN ID = 0x610 的响应
OK
>ATCEA10                    // CAN 扩展地址 = 0x10
OK

// --- 成功响应 ---

>22F150                     // UDS:ReadDataByIdentifier,DID=F150
610F10662F1500F25F0         // 610=CAN ID,F1=测试仪,06=长度,62=响应,F150=DID,0F25F0=数据

目录


通用命令

命令 描述
AT <CR> 重复上一条命令
发送单个回车符会使 ELM327 重复执行上一条已执行的命令。通常在希望以尽可能快的速度获取数值更新时使用——例如,您可以发送 01 0C 以获取发动机转速,然后每次需要更新时只发送一个回车符。
AT AL 允许长消息
标准 OBDII 协议将消息中的数据字节数限制为七个,ELM327 通常也这样做(发送和接收皆然)。如果选择了 AL,ELM327 将允许发送(八个数据字节)和接收(数量不限)长消息。默认情况下 AL 处于关闭状态(且选择了 NL)。要发送 8 字节 CAN 消息,ELM327 无需更改 AL,但您应当知道,如果在启用 CAN 扩展寻址或普通 ISO 15765 格式的情况下提供 8 个 CAN 数据字节,则数据字节可能会丢失。这是因为 CAN 消息只能传输 8 个数据字节,所以如果需要添加扩展地址或 PCI 字节,则实际发送的数据字节可能会更少。
AT AMC display Activity Monitor Count
活动监视器使用一个计数器来判断 ELM327 的 OBD 输入有多活跃。每次检测到活动时该计数器都会清零,而在没有活动时计数器会递增(每 0.655 秒一次)。该计数器表示自上次检测到活动以来经过的时间,在编写基于 OBD 活动的自定义逻辑时可能很有用。计数器在达到 FF 后不会继续递增(内部逻辑会将其停在该值),并在监视期间保持为 00。
AT AMT hh 将 Act Mon Timeout 超时设为 hh
如果在一段时间内未检测到 OBD 活动,ELM327 能够进入低功耗模式("睡眠")。该时间段可通过 PP 0F 的第 4 位或通过 AMT hh 值进行调整。如果 AMT hh 值非零,则到告警信号发出的时间为 (hh+1) × 0.65536 秒。如果该值设为 00,则活动监视器的所有低功耗输出都将被阻止(见第 68 页图 6)。有关活动监视器的更多信息,请参阅"电源管理"一节。
AT AT0, AT1 and AT2 自适应定时控制
在接收来自汽车的响应时,ELM327 传统上会在 AT ST hh 参数所设定的时间内等待响应。为确保该芯片能与各种各样的汽车配合工作,默认值被设得较为保守(较慢)。尽管可以进行调整,许多人并没有设备或经验来确定最佳值。Adaptive Timing 功能会根据您汽车的实际反应时间自动设置超时值。当总线负载等条件变化时,算法会经过学习并做出相应调整。请注意,它始终以您的 AT ST hh 值作为上限,绝不会选择更长的时间。共有三种可用的自适应定时设置。默认启用 Adaptive Timing option 1(AT1),这也是推荐设置。
AT0 用于关闭自适应定时(这样超时始终等于 AT ST 所设定的时间),而 AT2 是 AT1 的更激进版本(对于非常慢的连接效果更明显——对于更快的 OBD 系统您可能注意不到太大区别)。J1939 协议不支持自适应定时——它使用标准规定的固定超时。
AT BD 执行 OBD 缓冲区转储
ELM327 发送和接收的所有消息都会暂存在一组十二个存储单元中,称为 OBD 缓冲区。有时查看该缓冲区的内容很有用,也许是为了找出初始化失败的原因、查看上一条消息的报头字节,或仅仅是为了学习 OBD 消息的结构。您随时可以请求"转储"该缓冲区的内容(即打印出来)——这样做时,ELM327 会发送一个长度字节(表示缓冲区中消息的长度),随后是全部十二个 OBD 缓冲区位置的内容。例如,下面是一个"转储":

>AT BD 05 C1 33 F1 3E 23 C4 00 00 10 F8 00 00


其中 05 是长度字节——它告诉我们只有前 5 个字节是有效的(即 C1 33 F1 3E 和 23)。其余字节很可能是上一次操作遗留下来的。长度字节始终表示实际接收到的字节数,无论它们是否装入了 OBD 缓冲区。这在查看长数据流(使用 AT AL)时很有用,因为它表示实际接收的字节数 mod 256。请注意,缓冲区中只保存接收到的前十二个字节。
AT BI 跳过初始化序列
此命令应谨慎使用。它允许在无需初始化或握手的情况下激活 OBD 协议。初始化过程通常用于验证协议的有效性,没有它结果可能难以预测。它不应用于日常的 OBD 应用,提供它仅是为了创建 ECU 模拟器和教学演示器。
AT BRD hh try Baud Rate Divisor hh
此命令用于在计算机控制下将 RS232 波特率分频值改为 hh 中指定的十六进制值。它不适用于随意试验——如果您想从终端程序更改波特率,应使用 PP 0C。由于某些接口电路无法在高波特率下工作,BRD 命令使用一系列发送和接收来测试接口,任何失败都会导致回退到之前的波特率。这样可以测试多个波特率并选择可靠的一个用于通信。整个过程在第 53 页"使用更高的 RS232 波特率"一节中有详细描述。成功时,实际波特率(kbit/s)等于 4000 除以分频值(hh)。值 00 无效,BRD 命令不接受。
AT BRT hh 将波特率超时设为 hh
此命令允许更改用于波特率握手(即 AT BRD)的超时。时间延迟等于 hh × 5.0 毫秒,其中 hh 为 十六进制值。此设置的默认值为 0F,提供 75 毫秒。请注意,值 00 不会给出 0 毫秒——它提供最大时间 256 × 5.0 毫秒,即 1.28 秒。
AT D 全部设为默认值
此命令用于将参数设置为默认值(或出厂值),就像首次上电时一样。最后保存的协议将从内存中取出并成为 当前设置(可能会关闭其他活动协议)。用户对自定义报头、过滤器或掩码所做的任何设置都将恢复为默认值,所有定时器设置也将恢复为默认值。
AT D0 and D1 关闭或开启 DLC 显示
CAN 标准(ISO 15765-4)OBD 要求所有消息都由 8 个数据字节组成,因此显示数据字节数(DLC)通常意义不大。然而 在试验其他协议时,能够看到数据长度可能很有用。命令 D0 和 D1 控制 DLC 数字的显示(要看到此数字,必须开启报头)。显示时, 单个 DLC 数字出现在 ID(报头)字节和数据字节之间。默认设置由 PP 29 决定。
AT DM1 监视 DM1
SAE J1939 协议会以 Diagnostic Mode 1(DM1)消息的形式周期性地传输故障码。此命令将 ELM327 设置为持续监视此类消息,并在需要时跟踪多段 传输协议。请注意,使用掩码和过滤器的组合可以获得类似结果,但它们无法检测多行消息。DM1 命令添加了多行消息所需的 额外逻辑。仅当为 J1939 格式选择了 CAN 协议(A、B 或 C)时此命令才可用。在任何其他条件下尝试执行它都会 返回错误。
AT DP 描述当前协议
ELM327 会自动检测汽车的 OBD 协议,但通常不会报告它。DP 命令是一种便捷方式,可以了解芯片当前设置为哪种协议(即使 它尚未连接到汽车)。如果选择了某协议并同时选择了自动选项,AT DP 会在协议描述前显示单词 'AUTO'。请注意,描述中给出的是协议的真实名称, 而不是协议设置命令所用的编号。
AT DPN "按编号描述协议"
此命令类似于 DP 命令,但返回一个表示当前协议的数字。如果同时启用了自动搜索功能,数字前会带有字母 'A'。这与"设置协议"和"测试协议"命令所用的编号相同。
AT E0 and E1 关闭或开启"回显"
这些命令控制通过 RS232 端口接收到的字符是否回显(重新发送)到主机。字符回显可用于确认 发送到 ELM327 的字符是否被正确接收。默认设置为 E1(即回显开启)。
AT FE Forget Events
某些事件可能会从此改变 ELM327 的行为。其中之一是发生致命的 CAN 错误(ERR94),如果 PP 2A 的第 5 位为 '1',它会阻止后续的 CAN 协议搜索。通常此类事件会影响到下一次断电再上电之前的所有搜索,但可以通过 AT FE 命令以编程方式"忘记"它。
另一个例子是 'LV RESET' 事件,如果 PP 2A 的第 4 位为 '1',它会阻止 CAN 协议搜索。此事件也可以通过 AT FE 命令忘记。
AT H0 and H1 关闭或开启"报头"
这些命令控制是否在来自汽车的响应中显示额外的(报头)信息字节。ELM327 通常不显示它们,但它们可能 有用(尤其是当您收到多个响应并想确定它们来自哪些模块时)。开启报头(使用 AT H1)实际显示的不仅仅是报头字节——您还会看到 完整传输的消息,包括校验位和 PCI 字节,并且如果通过 PP 29 或 AT D1 启用了 CAN 数据长度码(DLC),也可能看到它。当前版本的芯片不显示 CAN CRC 码,也不显示 特殊的 J1850 IFR 字节(某些协议用它来确认消息已收到)。
AT I 自我介绍
此命令使芯片通过打印产品标识字符串(目前为 'ELM327 v2.3')来标识自己。软件可以用它来确定正在与哪一种 集成电路通信,而无需重启芯片。
AT IA 协议是否活动?
此命令可让您了解 ELM327 是否认为当前协议处于活动状态。响应时它会回复 Y 或 N,即"是"或"否"。
要让 ELM327 响应 某些命令,需要一个"活动"协议。如果协议在标准请求或字节握手中收到了正确响应,或者用户通过 AT BI 命令跳过了该过程,则该协议被视为活动。请注意,ELM327 最初会将协议标记为活动,但之后不再跟踪它,因此不知道 ECU 是否在未来某个时刻停止了对请求的响应(即 协议是否不再活动)。您的软件可能需要周期性地发送一个标准请求(最好是 01 00),以确定 ECU 是否确实仍处于活动状态。
AT IB10 将 ISO 波特率设为 10400
此命令将 ISO 9141-2 和 ISO 14230-4(协议 3、4 和 5)的波特率恢复为默认值 10400。请注意,IB10 命令 可在任何时候使用(即"动态"使用)。
AT IB12 将 ISO 波特率设为 12500
此命令用于将 ISO 9141-2 和 ISO 14230-4 协议(编号 3、4 和 5)所用的波特率更改为 12500 波特。请 注意,IB12 命令可在任何时候使用(即"动态"使用)。
AT IB15 将 ISO 波特率设为 15625 波特
此命令用于将 ISO 9141-2 和 ISO 14230-4 协议(编号 3、4 和 5)所用的波特率更改为 15625 波特。请 注意,IB15 命令可在任何时候使用(即"动态"使用)。
AT IB48 将 ISO 波特率设为 4800 波特
此命令用于将 ISO 9141-2 和 ISO 14230-4 协议(编号 3、4 和 5)所用的波特率更改为 4800 波特。请 注意,IB48 命令可在任何时候使用(即"动态"使用)。
AT IB96 将 ISO 波特率设为 9600 波特
此命令用于将 ISO 9141-2 和 ISO 14230-4 协议(编号 3、4 和 5)所用的波特率更改为 9600 波特。请 注意,IB96 命令可在任何时候使用(即"动态"使用)。
AT IFR0, IFR1 and IFR2 IFR 控制 — 非监视
SAE J1850 协议允许在每条消息之后发送一个 In-Frame Response(IFR)字节,通常用于确认该消息已被正确接收。ELM327 会自动 为您生成并发送此字节,除非您正在进行监视(默认情况下 ELM327 在监视期间始终保持静默)。您可以通过 IFR 命令改变此行为。
IFR0 命令关闭 所有 IFR 的发送,无论消息是否需要。IFR2 命令则相反——无论消息中是否有错误,都将始终在响应时发送 IFR 字节。IFR1 设置会在 消息被正确接收,且第一个报头字节中的 'K' 位(无论 PWM 还是 VPW)允许时发送 IFR。默认使用 IFR1 设置。
AT IFR4, IFR5 and IFR6 IFR 控制 — 任意时刻
虽然原始的 ELM327 芯片在监视时从不发送 IFR,但在某些监视情况下您可能希望发送 IFR。IFR4、IFR5 和 IFR6 命令 允许在任意时刻控制 IFR 的发送,无论是否正在进行监视。它们模仿 IFR0、IFR1 和 IFR2 命令——设置 IFR4 会使 IFR 永不发送,IFR5 在 没有错误且 'K' 位允许时发送 IFR,而设置 IFR6 会强制始终生成 IFR(即使存在错误)。
AT IFR H and IFR S IFR 取自报头或源地址
在 J1850 In-Frame Response(IFR)字节中发送的值通常与请求报头中源地址(即测试仪)字节所发送的值 相同。然而有时希望使用不同的值,这组命令即允许这样做。如果您发送 AT IFR S,ELM327 将使用定义为源地址 的值(通常为 F1,但可通过 PP 06 或 AT TA 更改),即使报头字节中发送了不同的值。这通常不是所需的,应当谨慎使用。AT IFR H 将 IFR 字节的发送恢复为报头中所指定的值,这是默认设置。
AT IGN 读取 IgnMon 输入信号电平
此命令读取引脚 15 上的信号电平。假定逻辑电平与点火电压相关,因此如果输入为高电平,响应 将为 'ON',低电平时为 'OFF'。如果您想用自己的软件执行电源管理功能,此功能最为有用。如果关闭引脚低电平时的自动低功耗响应(将 PP 0E 的第 2 位设为 0),则引脚 15 将用作 RTS 输入。该输入为低电平不会关闭电源,但会中断任何当前的 OBD 活动。您需要做的就是 检测在 ELM327 工作被中断时发送的 'STOPPED' 消息,然后用 AT IGN 检查引脚 15 的电平。如果发现它已关闭,您可以自行执行有序关闭。
AT IIA hh 将 ISO 初始地址设为 hh
ISO 9141-2 和 ISO 14230-4 标准规定,在开始与 ECU 的会话时,初始化序列应发往特定地址($33)。如果您 想进行试验,将慢速五波特序列发往其他地址,可以通过此命令实现。例如,如果您希望初始化对地址 $7A 的 ECU 执行,只需发送:>AT IIA 7A,ELM327 在访问它时(协议 3 或 4)就会使用该地址。完整的八位值会按给定形式使用——不做任何更改 (即不添加奇偶校验位等)。
请注意,设置此值不会影响报头字节中所用的地址值。在恢复默认设置或复位 ELM327 时,ISO 初始地址 会恢复为 $33。
AT L0 and L1 关闭或开启换行
此选项控制是否在每个回车符之后发送换行符。设置 AT L1 时,每个回车符之后都会生成换行符, 而 AT L0 时则关闭。通常用户在使用终端程序时倾向于开启此选项,在使用自定义界面时关闭(多余的字符只会拖慢交互)。默认 设置由上电(或复位)时引脚 7 的电压电平决定。如果电平为高——开启换行,否则关闭。
AT LP 进入低功耗模式
此命令使 ELM327 关闭除"基本服务"以外的一切,以将功耗降至最低。ELM327 会回复 "OK"(不带回车符),然后在 一秒后改变 PwrCtrl(引脚 16)输出的状态并进入低功耗模式(待机)。可以通过 RS232 输入上的字符、IgnMon 输入(引脚 15)上的上升沿,以及常规的复位方式(断电/上电、引脚 1 低电平或电源跌落)使芯片返回正常模式。详情见"电源管理"一节(第 67 页)。
AT M0 and M1 关闭或开启内存
ELM327 具有内部非易失性存储器,即使在断电后也能记住上次使用的协议。如果芯片经常用于 同一协议,这很方便——它将在下次上电时优先使用。要启用内存功能,需要使用 AT M1 命令或将引脚 5 连接到高逻辑电平。
当内存功能开启时,每次 检测到有效的 OBD 协议,它都会被保存并成为新的默认值。如果内存功能关闭,找到的协议不会被保存,ELM327 始终从最后保存的协议启动。如果 ELM327 用于协议频繁变化的环境,最好关闭内存并执行 AT SP 0。如果您连接到单一汽车,将其协议保存为默认值则最为合理。
默认 设置由上电(或复位)时引脚 5 的电压电平决定。高电平(VDD)——内存开启,低电平——关闭。
AT NL 正常长度消息
此命令将 ELM327 设置为按 OBD 标准规定发送正常数量的数据字节。它用于撤销在 Allow Long(AT AL)模式下所做的更改。请注意,对于 KWP 协议,ELM327 无需更改 AL 即可接收更长的消息。您可以直接将 IC 保持在默认的 NL 设置,所有接收到的 字节都会显示出来。
AT R0 and R1 关闭或开启响应
这些命令控制 ELM327 是否自动接收(并显示)汽车返回的消息。如果关闭响应,则在发送请求后芯片不会等待 汽车的响应,而是立即返回等待下一条 RS232 命令(ELM327 不会打印任何内容表示发送成功,但如果发送不成功您会看到一条消息)。R0 可能 适用于在非 OBD 网络应用中使用芯片时盲发命令,或在教学中模拟 ECU 时使用。但不建议将此选项用于常规 OBD 通信,因为如果汽车 期待确认却未收到,可能会出现问题。R0 设置始终覆盖 OBD 请求时提供的任何"响应数量数字"。默认使用 R1,即 "响应开启"。
AT RD 从用户内存读取数据
由 SD 命令保存的字节值通过此命令取回。只有一个存储单元,因此不需要地址。
AT RV Read the input Voltage
这会启动对引脚 2 上电压的读取并将其转换为十进制电压值。默认假定输入通过 1:5.7 分压比的 分压器(例如串联的 47KΩ 和 10KΩ 电阻,其中 10KΩ 从引脚 2 连接到 Vss)连接到被测电压,且 ELM327 的供电为标称 5 V。这样可以测量约 28 V 以内的输入电压(引脚 2 上的电压不应超过 Vdd),未校准精度通常约为 2%。有关校准的信息,请参阅"读取电池电压"一节。
AT S0 and S1 关闭或开启空格打印
这些命令控制是否在 ECU 响应中插入空格字符。ELM327 通常将 ECU 响应输出为以空格分隔的一串 hex 字符(便于 阅读),但如果去掉每三个字节中的一个(空格),消息的传输速度会快得多。虽然这会使消息对人类不那么易读,但可以显著加快计算机的数据处理。默认 开启空格(S1),每个响应中都会插入空格字符。
AT SD hh 保存数据字节 hh
ELM327 可以将一个字节的信息保存在专门的非易失性存储器中,即使断电也能保存其内容。只需指定要 保存的字节,然后用读取数据命令(AT RD)取回它。该单元非常适合存储用户设置、设备标识符、重复次数计数或其他信息。
AT WS 热重启
类似于 AT Z 命令,但上电时不进行 LED 测试。用户可能会发现这是一种快速"重新开始"的便捷方式,没有 AT Z 那样的额外延迟。在使用可变 RS232 波特率(AT BRD 命令)时,建议用此命令而不是 AT Z 来复位芯片,因为 AT WS 不会重置 RS232 波特率。
AT Z 完全复位
此命令使芯片执行完全复位,就像断电再上电一样。所有设置都恢复为默认值,芯片进入等待 RS232 总线上字符的 状态。请注意,由 AT BRD 命令设置的波特率将丢失,ELM327 将恢复为默认波特率设置。
AT @1 显示设备描述
此命令显示设备描述字符串。默认文本为 "OBDII to RS232 Interpreter"。
AT @3 cccccccccccc 保存设备标识符
此命令用于设置设备标识码。必须发送正好 12 个字符;写入内存后无法更改(@3 命令只能使用 一次)。字符必须是可打印的(ASCII 码从 0x21 到 0x5F 含)。如果您正在开发用于写入标识符的软件,您可能会对 ELM328 芯片感兴趣,它允许通过 @3 命令多次写入(但无法发送 OBD 消息)。

协议选择命令

命令 描述
AT PC "关闭协议"
有时需要停止(停用)某个协议。也许您没有使用协议自动搜索,而是想手动激活和停用 协议。也许您想停止发送空闲(唤醒)消息,或有其他原因。在这些情况下,PC 命令用于强制关闭协议。
AT SP h 设置协议 h
此命令将 ELM327 设置为使用 "h" 中指定的协议工作,并将其保存为新的默认值。无论 AT M0/M1 设置如何,协议都将被保存。
ELM327 支持 12 种不同的协议(其中两种可由用户定义):
0 — 自动,1 — SAE J1850 PWM(41.6 kBaud),2 — SAE J1850 VPW(10.4 kBaud),3 — ISO 9141-2(5 波特,10.4 kBaud),4 — ISO 14230-4 KWP(5 波特,10.4 kBaud), 5 — ISO 14230-4 KWP(快速初始化,10.4 kBaud),6 — ISO 15765-4 CAN(11 位,500 kBaud),7 — ISO 15765-4 CAN(29 位,500 kBaud),8 — ISO 15765-4 CAN(11 位,250 kBaud),9 — ISO 15765-4 CAN(29 位,250 kBaud),A — SAE J1939 CAN (29 位,250* kBaud),B — USER1 CAN(11* 位,125* kBaud),C — USER2 CAN(11* 位,50* kBaud)。(* — 用户可配置)
协议 0 告诉 ELM327 汽车的协议未知,需要执行搜索。命令 AT SP 0 将协议设为 0,但不写入 EEPROM(为了加快速度)。如果选择了特定协议(例如 AT SP 3),它将成为默认值,并且是唯一使用的协议。
AT SP 00 擦除已保存的协议
为加快协议确定速度,SP 0 命令设置自动模式,但不执行(耗时的)EEPROM 写入。这减少了 EEPROM 的磨损。然而有时 需要将值 0 写入已保存的协议——SP 00 命令即为此目的而设。
AT SP Ah 设置协议 h 并启用自动搜索
SP 命令的此变体允许选择起始(默认)协议,同时在连接失败时保留自动搜索有效协议的能力。 例如,如果您的汽车使用 ISO 9141-2,但您偶尔想将 ELM327 用于其他汽车,可以使用 AT SP A3——首先使用协议 3,但如果失败则执行自动搜索。别忘了 关闭内存功能,否则每个新检测到的协议都会成为默认值。
即使内存关闭,SP Ah 也会保存协议信息(但 SP A0 和 SP 0A 不写入 EEPROM)。字母 "A" 可以位于 h 之前或之后,因此 AT SP A3 和 AT SP 3A 是等效的。
AT SS 使用标准搜索序列
SAE J1978 标准规定了诊断仪器应使用的协议搜索顺序。它遵循 ELM327 的协议编号。为加快 搜索,ELM327 通常不遵循此顺序,但如果您发出 AT SS 命令,它将会遵循。
AT TP h 测试协议 h
此命令与 SP 相同,区别在于所选协议不会立即保存到内部 EEPROM 内存中,即不更改默认设置。请注意:如果 内存功能已开启(AT M1)且新协议被证明有效,它将作为新的默认值保存到内存中。
AT TP Ah 测试协议 h 并启用自动搜索
此命令类似于 AT TP,但如果所选协议无法初始化,ELM327 将自动遍历其余协议,尝试连接到其中 一个。

CAN 命令

命令 描述
AT C0 and C1 关闭或开启 CAN 发送确认
ELM327 在发送 CAN 消息后总是会等待,以确保数据传输正确完成。如果未能完成,会返回 'CAN ERROR' 消息。在 v2.3 固件中,您可以关闭此确认,从而可能稍快地返回请求状态。这可以节省发送单条消息的时间(500 kbit/s 时约 230 微秒),但 发送出错时不会有反馈。我们建议始终将此参数保持为默认值(C1——确认开启)。
AT CAF0 and CAF1 关闭或开启 CAN 自动格式化
这些命令决定 ELM327 是否帮助您格式化发送和接收的 CAN 数据。开启 CAN 自动格式化(CAF1)时, 格式化字节(PCI)将在发送时自动生成,在接收时自动删除。这意味着您可以像往常一样继续发送 OBD 请求(01 00 等),而无需关注 CAN 诊断系统所需的额外字节。此外,开启格式化时,帧中接收到的所有多余(未使用)数据字节都将被删除,带有无效 PCI 字节的消息将被忽略。 (但在监视时,所有带有无效 PCI 字节的消息都会显示,旁边会出现 '
AT CEA 关闭 CAN 扩展地址
CEA 命令用于关闭通过 CEA hh 命令设置的特殊功能。它还会将 AT CER hh 命令所设置的地址恢复为默认值。
AT CEA hh 将 CAN 扩展地址设为 hh
某些(非 OBD)CAN 协议通过将八个数据字节中的第一个用作目标(接收方)地址来扩展寻址字段。此命令允许 ELM327 与此类协议交互。发送 CEA hh 命令会使 ELM327 将值 hh 作为第一个数据字节插入您发送的所有 CAN 消息中。它还为接收到的消息增加了一个过滤步骤,只放行在第一个字节位置带有测试仪地址的消息(除了要求 ID 位匹配 AT CF 和 CM、FT 或 CRA 所设置的模式之外)。AT CEA hh 命令可在任何时候发送,更改立即生效,从而可以"动态"更改地址。扩展寻址在第 64 页"使用 CAN 扩展地址"一节中有更详细的讨论。CEA 工作模式默认关闭,通过发送带目标地址的 CEA 命令来开启。开启后,可以通过发送 AT CEA 命令(不带地址)或用 AT D、AT Z 等恢复芯片默认设置来关闭它。请注意,如果开启了 J1939 格式化,CEA 设置不起作用。
AT CER hh 将 CAN 扩展 Rx 地址设为 hh
默认情况下,ELM327 接收对 CAN 扩展寻址请求的响应,这些响应在第一个数据字节位置包含"测试仪地址"。CER 命令允许选择不同的接收地址。通过此命令设置的值可用 AT CEA 命令重置为默认值。
AT CF hhh 将 CAN ID 过滤器设为 hhh
CAN 过滤器与 CAN 掩码结合工作,以确定接收方将接受哪些信息。接收每条消息时,传入的 CAN ID 位会与 CAN Filter 位进行比较(如果掩码位为 '1 ')。如果所有对应位都匹配,消息将被 ELM327 接受并处理,否则将被丢弃。CAN Filter 命令的这个三位版本在带 11 位标识符的 CAN 系统中稍微简化了过滤器的设置。只使用所提供半字节中最右边的 11 位,最高位被忽略。然而实际上数据存储为四个字节,此命令为其余字节添加前导零。更多信息请参阅 CM 命令。请注意,在使用 MP 命令或 DM1 命令的同时,对 SAE J1939 协议使用 CRA、CF 或 CM 命令时,响应将不可预测。实际上,我们不建议在任何时候对 J1939 协议使用 CRA、CM 或 CF 命令。如果您需要在 J1939 协议中进行额外过滤,请考虑使用 FT 命令。
AT CF hh hh hh hh 将 CAN ID 过滤器设为 hhhhhhh
此命令允许一次设置 CAN 过滤器的全部四个字节(实际为 29 位)。最高三位将始终被忽略,可以赋予任意值。此命令也可用于输入 11 位 ID 过滤器,因为它们存储在设备内部的相同位置(输入 AT CF 00 00 0h hh 与输入更短的命令 AT CF hhh 完全相同)。请注意,在使用 MP 命令或 DM1 命令的同时,对 SAE J1939 协议使用 CRA、CF 或 CM 命令时,响应将不可预测。实际上,我们不建议在任何时候对 J1939 协议使用 CRA、CM 或 CF 命令。如果您需要在 J1939 协议中进行额外过滤,请考虑使用 FT 命令。
AT CFC0 and CFC1 关闭或开启 CAN 流控制
ISO 15765-4 CAN 协议要求始终在收到 "First Frame" 消息时发送一条 "Flow Control" 消息,ELM327 会在无需用户干预的情况下自动发送它们。在试验非 OBD 系统时,可能需要关闭此自动响应——AT CFC0 命令即为此目的而设。从 v2.0 固件开始,这些命令还会开启/关闭在收到 TP.CM_RTS 请求时发送 J1939 TP.CM_CTS 消息。在监视时(AT MA、MR 或 MT),无论 CFC 设置如何,都不会发送流控制消息。默认设置为 CFC1(流控制开启)。
AT CM hhh 将 CAN ID 掩码设为 hhh
CAN 系统中可能同时传输大量消息。为了限制 ELM327 查看的消息数量,需要一个过滤系统从所有其他消息中筛选出所需的。为此使用了一个与掩码结合工作的过滤器。掩码是一组位,用于向 ELM327 表明过滤器中哪些位是相关的,哪些可以忽略。'must match ' 条件通过将掩码位设为 '1 ' 来表示,'don 't care' 通过将位设为 '0' 来表示。CM 命令的这个三位变体用于为 11 位标识系统获取掩码值 (最高位始终被忽略)。请注意,29 位和 11 位掩码使用共同的存储位置,因此如果您愿意多输入一些,11 位掩码可以用下一条命令(CM hh hh hh hh)来指定。值是右对齐的,因此您需要指定五个前导零,其后跟三个掩码字节。请注意,在使用 MP 命令或 DM1 命令的同时,对 SAE J1939 协议使用 CRA、CF 或 CM 命令时,响应将不可预测。实际上,我们不建议在任何时候对 J1939 协议使用 CRA、CM 或 CF 命令。如果您需要在 J1939 协议中进行额外 过滤,请考虑使用 FT 命令。
AT CM hh hh hh hh 将 CAN ID 掩码设为 hhhhhhhhh
此命令用于为 29 位标识系统指定掩码值。请参阅 CM hhh 命令的讨论,因为它几乎相同,只是长度不同。请注意,您在第一位数字中指定的最高三位将被忽略。请注意不能将其用于 J1939 协议的警告。请注意,在使用 MP 命令或 DM1 命令的同时,对 SAE J1939 协议使用 CRA、CF 或 CM 命令时,响应将不可预测。实际上,我们不建议在任何时候对 J1939 协议使用 CRA、CM 或 CF 命令。如果您需要在 J1939 协议中进行额外过滤,请考虑使用 FT 命令。
AT CP hh 将 CAN 优先级位设为 hh
此命令提供了一种为用于发送消息的 29 位 CAN 标识符指定五个最高位的方法(其余 24 位可用 AT SH 命令设置)。许多系统使用这些位来为消息赋予优先级值并确定消息的协议。超出所需五个之外提供的任何位都会被 ELM327 忽略且不保存(它只使用此字节的五个低位)。CP hh 值默认为十六进制值 18,可随时用 AT D 命令恢复。
AT CRA 复位 CAN Rx Addr
AT CRA 命令用于将 CAN 接收过滤器恢复为默认值。请注意它没有参数(即无数据)。
AT CRA hhh 将 CAN Rx Addr 设为 hhh
设置 CAN 掩码和过滤器有时会很复杂,因此如果您只想接收来自单个地址(即单个 CAN ID)的信息,此命令可能非常有用。例如,如果您只想查看来自地址 7E8 的信息,只需发送 AT CRA 7E8,ELM327 就会执行必要的掩码和过滤器调整。如果您想允许接收一个范围内的值,可以使用字母 X 表示"无所谓"条件。也就是说,AT CRA 7EX 会放行所有以 7E 开头的标识符(7E0、7E1 等)。对于更具体的标识符范围,可能需要指定掩码和过滤器。要撤销 CRA 命令所做的更改,只需发送 AT CRA 或 AT AR。请注意,在使用 MP 命令或 DM1 命令的同时,对 SAE J1939 协议使用 CRA、CF 或 CM 命令时,响应将不可预测。实际上,在使用 J1939 协议时,我们不建议在任何时候使用 CRA、CM 或 CF 命令。如果您需要在 J1939 协议中进行额外过滤,请考虑使用 FT 命令。
AT CRA hhhhhhhh 将 CAN Rx Addr 设为 hhhhhhhh
此命令与前一条相同,区别在于它用于 29 位 CAN 标识符。发送 AT CRA 或 AT AR 同样会撤销此命令所做的所有更改。请注意,在使用 MP 命令或 DM1 命令的同时,对 SAE J1939 协议使用 CRA、CF 或 CM 命令时,响应将不可预测。实际上,我们不建议在任何时候对 J1939 协议使用 CRA、CM 或 CF 命令。如果您需要在 J1939 协议中进行额外过滤,请考虑使用 FT 命令。
AT CS 显示 CAN 状态计数器
CAN 协议要求对检测到的发送和接收错误数量保持统计。当错误数量很大时(由于硬件或软件问题),设备会关闭,以免影响总线上的其他数据。AT CS 命令可让您以十六进制格式查看发送器(Tx)和接收器(Rx)的错误数。如果发送器必须关闭(计数 >FF),您会看到 'OFF' 而不是具体的计数。从 v2.2 固件开始,CS 响应还会显示当前 CAN 上的信号频率。典型响应可能如下所示:

``` >AT CS
AT CSM0 and CSM1 关闭或开启 CAN 静默监视
ELM327 被设计为在监视 CAN 总线时绝对静默。因此它可以精确报告它所看到的内容,不会以任何方式影响信息。有时(在台架测试或连接到专用 CAN 端口时)可能需要 ELM327 以非静默方式工作(即生成 ACK 位等),CSM 命令即为此目的而设。CSM1 将其开启,CSM0 关闭,默认值由 PP 21 决定。试验此功能时请小心。如果您选择了错误的波特率,然后在关闭静默监视的情况下观察 CAN 总线,您将破坏数据流。在确认选择了正确的波特率之前,请始终保持静默监视开启。
AT CTM1 将定时器乘数设为 1
此命令使 AT ST 所设置的所有超时乘以系数 1。请注意,目前这只影响 CAN 协议(6 到 C)。默认使用 CTM1。CTM5 [ 将定时器乘数设为 5 ] 此命令使 AT ST 所设置的所有超时乘以系数 5。请注意,目前这只影响 CAN 协议(6 到 C)。此命令最初是为了帮助接收某些 J1939 消息而添加的(作为 JTM5)。此后我们收到了多个请求,希望让它影响所有 CAN 模式,因此我们更改了 JTM5 代码并添加了新的 CTM1/CTM5 命令。使用 CTM5 时,我们提醒您 Adaptive Timing 代码不会跟踪设置的更改,因此我们建议将其关闭(使用 AT AT0)。此乘数默认关闭。
AT FC SD 1-5 字节
使用此命令可以定义在 CAN 流控制消息中发送的数据字节。可以指定一到五个数据字节,如果协议需要,消息中其余的数据字节会自动设置为默认 CAN 填充字节。通过此命令传输的数据只有在开启流控制模式 1 或 2 时才会使用。
AT FC SH hhh 设置 Flow Control 报头
使用此命令可以设置用于 CAN 流控制消息的报头字节(或更准确地说 "CAN ID")。只会使用最右边的 11 位——最高位始终被删除。此命令仅影响流控制模式 1。
AT FC SH hhhhhhhh 设置 Flow Control 报头
此命令用于为 29 位 CAN ID 系统设置 Flow Control 响应的报头(或 'CAN 位')。由于 8 个半字节定义 32 位,只会使用最右边的 29 位——最高三位始终被删除。此命令仅影响流控制模式 1。
AT FC SM h 将 Flow Control 模式设为 h
此命令设置在开启自动 Flow Control 响应时 ELM327 对 First Frame 消息的反应方式。单个数字值可以是 '0'(默认)表示完全自动响应、'1' 表示完全用户自定义响应,或 '2' 表示响应中用户自定义的数据字节。请注意,只有在您定义了所需的数据字节(可能还有 ID)后,才能开启 FC 模式 1 和 2。否则您会收到错误。更多信息和示例可在"更改流控制消息"一节(第 62 页)中找到。
AT FT 关闭发送器过滤
如果设置了用于限制接收消息的过滤器,可以用 AT FT 命令将其关闭。
AT FT hh 按发送器过滤 = hh
此命令为接收消息提供了额外一层过滤。如果由命令 hh 传递的值与标准三字节报头第三个字节的值或 CAN 标识符的低八位匹配,则消息将被接受。这是对其他命令所提供的任何其他过滤的补充。更多信息请参阅"按发送器过滤"一节。
AT PB xx yy 设置协议 B 参数
此命令允许更改协议 B(USER1)的参数和波特率,而无需更改相应的可编程参数(PP 2C 和 PP 2D)。这使得在测试期间更容易更改协议。要使用此功能,只需将 xx 设为 PP 2C 的值,将 yy 设为 PP 2D 的值,然后执行命令。下次协议初始化时将使用这些值。例如,要将协议 B 配置为用于 500 kbit/s J1939,只需执行命令:>AT PB 42 01 再举一例,假设您想监视一个使用 33.3 kbit/s 11 位 CAN 的系统。如果不需要任何特殊格式化,这意味着 PP 2C 为值 11000000 或十六进制 C0,PP 2D 为十进制 15 或十六进制 0F。只需用命令将这些值发送给 ELM327:>AT PB C0 0F 然后用命令开始监视:>AT MA 如果您看到 CAN ERROR 错误并意识到您需要的是 83.3 kbit/s 波特率,请关闭协议并发送新值:>AT PC OK >AT PB C0 06 OK >AT MA 以这种方式传递的值不会影响可编程参数 2C 和 2D 中存储的值,并在 ELM327 重启时丢失。如果您希望设置在多个上电周期中保持,则可以将它们保存到 CAN 协议 USER1 或 USER2 的可编程参数中。
AT RTR 发送 RTR 消息
此命令使一条特殊的 CAN 'Remote Frame' 消息被发送。这种类型的消息不包含数据字节,并设置了 Remote Transmission Request(RTR)位。报头和过滤器将保持先前设置的样子(即 ELM327 不对响应可能的格式做任何假设),因此可能需要调整掩码和过滤器。此命令必须在活动的 CAN 协议下使用(该协议会发送和接收消息),因为它无法启动协议搜索。请注意,CAF1 设置通常会排除所有 RTR 的显示,因此如果您正在监视消息并想看到 RTR,则必须关闭格式化或开启报头。
ELM327 将 RTR 视为任何其他消息,并等待汽车的响应(除非选择了 AT R0)。
AT SH xyz 将报头设为 00 0x yz
输入 11 位 CAN ID(报头)通常需要添加前导零(例如 AT SH 00 07 DF),但此命令简化了这一点。AT SH xyz 命令接受一个三位参数,只取其最右边的 11 位,添加前导零并保存结果。例如,AT SH 7DF 是一条有效命令,便于处理 11 位 CAN 系统。报头实际保存为 00 07 DF。
AT SH xx yy zz 将报头设为 xx yy zz
此命令允许用户手动控制消息报头三个字节的值。这些字节通常自动指定,但有时希望更改它们(特别是在试验物理寻址时)。
建议在激活协议后再设置报头,以便 wakeup 等消息使用默认值。
报头字节以十六进制数字给定:xx — 第一个字节(优先级/类型),yy — 第二个(接收方),zz — 第三个(发送方)。它们在下次设置或用 D、WS 或 Z 命令恢复默认值之前一直有效。
此命令用于指定所有报头字节——J1850、ISO 9141、ISO 14230 或 CAN。CAN 系统使用这三个字节填充 ID 的第 0–23 位(对于 29 位 ID),或只用最右边的 11 位填充 11 位 CAN ID。29 位系统的额外 5 位通过 AT CP 命令设置。
AT SH ww xx yy zz 将报头设为 ww xx yy zz
AT SH 命令的四字节版本允许用一条指令设置完整的 29 位 CAN ID。它等效于同时使用 AT CP(用于五个最高位)和 AT SH 的三字节版本(用于其余三个字节)。
AT ST hh 将超时设为 hh
发送请求后,ELM327 会在设定的时间内等待响应,之后可能会声明未从汽车收到数据("NO DATA")。在收到响应后,同样的定时器设置也可用于等待是否还会有其他响应到来(但这取决于 AT 设置)。AT ST 命令允许以 4 毫秒(或如果在 CAN 协议中选择了 CTM5 则为 20 毫秒)为步长调整此定时器。如果开启了 Adaptive Timing 功能,AT ST 时间设定应允许的最大时间,即使自适应算法确定该值应该更大。在大多数情况下,最好保留默认的 AT ST 时间,让自适应定时算法决定用于超时的值。默认情况下 ST 定时器设为 32(提供约 200 毫秒的时间),但可通过更改 PP 03 的值来调整此默认值。请注意,值 00 不会导致 0 毫秒的时间——它会将定时器恢复为默认值。此外,在协议搜索期间会使用一个内部设定的最小时间——使用 AT ST 可以选择更长的时间,但不能更短。
AT V0 and V1 关闭或开启可变数据长度
许多 CAN 协议(例如 ISO 15765-4)期望发送八个数据字节。V0 和 V1 命令允许(对任何 CAN 协议)覆盖此行为。选择 V1 会使当前 CAN 协议发送可变长度的消息,类似于协议 B 和 C 的 PP 2C 和 PP 2E 中的第 6 位。值 V0(默认)关闭对可变长度消息的强制发送,格式恢复为协议设置。

ISO 命令(9141 / 14230)

命令 描述
AT FI 执行快速初始化
在 Keyword 协议的某一版本中,使用所谓的"快速初始化"序列来开始数据交互。通常此序列在需要发送第一条消息时执行,紧接着便发送该消息。然而某些 ECU 可能需要在这两个动作之间留出更多时间,而拥有单独的初始化命令可以控制这一时间。只需发送 AT FI,稍等片刻,然后发送消息。您可能需要试验以获得合适的延迟量。
此命令的另一种用法是对 ISO 9141 类型协议(即 3 - CARB 格式)执行快速初始化。只需执行以下步骤来产生快速初始化,然后切换到协议 3:AT SP 5 AT FI AT SP 3 AT BI 此后您就能与 ECU 控制单元通信。
请注意,上述代码中无需关闭协议(即 AT PC),因为 ELM327 在切换协议时会自动执行。要使用 AT FI 命令,必须选择协议 5,否则会出错。
AT KW 显示关键字
在 ISO 9141-2 和 ISO 14230-4 协议初始化时,会向 ELM327 传输两个特殊字节(关键字)(它们的值用于确定 ELM327 是否能支持某一协议变体)。如果您想知道这些字节的值,只需发送 AT KW 命令。
AT KW0 and KW1 关闭或开启关键字检查
ELM327 会查找在 ISO 9141-2 和 ISO 14230-4 初始化期间应由 ECU 发送给它的特定字节(称为关键字)。如果未找到这些字节,则认为初始化失败(您可能会看到 'UNABLE TO CONNECT' 消息,或可能是 'BUS INIT: ...ERROR')。如果您试图连接到不兼容 OBD 的 ECU,或可能是旧的 ECU,就可能发生这种情况。如果您想试验非标准系统,可能需要让 ELM327 执行初始化序列,但忽略接收到的关键字字节的内容。为此,只需发送关闭关键字命令:

>AT KW0


关闭关键字检查后,ELM327 仍会要求响应中有两个关键字字节,但不会查看字节的实际值。它也会向 ECU 发送确认并等待来自它的最终响应(但如果未收到,不会停止或报错)。这可能让您在原本"不可能"的情况下建立连接。正常行为可用 AT KW1 恢复,这是默认设置。
AT SI 执行慢速初始化
协议 3 和 4 使用所谓的 5 波特(或慢速)初始化序列来开始数据交互。通常此序列在发送第一条消息时执行,之后立即发送消息。然而某些 ECU 可能需要在这些动作之间留出更多时间,而拥有单独的初始化命令可以控制此延迟。只需发送 AT SI,稍等片刻,然后发送消息。可能需要对延迟量进行试验。要使用 AT SI 命令,必须选择协议 3 或 4,否则会出错。
AT SW hh 将 Wakeup 间隔设为 hh
建立连接后,某些协议要求每隔几秒进行一次周期性数据交互,以便 ECU 保持通信通道开启。如果消息不到来,ECU 会认为您已结束工作并关闭通道。ELM327 会自动生成周期性消息以维持连接。对这些消息的响应会被忽略。
(目前只有协议 3、4 和 5 支持这些消息——CAN 没有相应安排。)
Wakeup 消息之间的间隔通过 AT SW hh 命令以 20 毫秒为步长配置(hh — 从 00 到 FF 的 hex 值)。FF 时最大延迟约 5 秒。默认(92)——标称延迟 3 秒。
值 00 会停止周期性消息。AT SW 00 之后,只能通过关闭并重新初始化协议来恢复它们。
AT WM 1–6 字节
此命令允许覆盖 Wakeup 消息(有时称为"周期性空闲消息")的设置。只需指定要发送的消息(通常是三个报头字节和一到三个数据字节),ELM327 会添加校验和并按 AT SW 设置发送它们。默认值为:ISO 9141 是 68 6A F1 01 00,KWP 是 C1 33 F1 3E。

J1939 命令

命令 描述
AT JE 为 J1939 启用 ELM 数据格式
J1939 标准要求 PGN 请求以相对于标准"从左到右"顺序的反向字节顺序发送。例如,对于发动机温度请求(PGN 00FEEE),数据字节实际上以反向顺序发送(EE FE 00),而 ELM327 通常期望您正好按此顺序提供数据。
试验时,不断需要反转字节可能令人困惑,因此定义了 ELM 格式,它会为您执行反转。当开启 J1939 ELM 格式(JE)、选择了 J1939 协议且您提供三个数据字节时,ELM327 会在发送给 ECU 之前改变它们的顺序。对于发动机温度请求,您发送 00 FE EE(而不是 EE FE 00)。JE 格式默认开启。
AT JHF0 and JHF1 关闭或开启 J1939 报头格式化
在打印响应时,ELM327 通常会对 J1939 ID(报头)位进行格式化,以隔离优先级位、将所有 PGN 信息分组并分离源地址字节。如果您更愿意将 ID 信息视为四个独立的字节(大多数 J1939 程序都这样做),只需用 JHF0 命令关闭格式化。CAF0 命令具有相同效果(并覆盖 JHF 设置),但也会影响其他格式化。默认设置为 JHF1。
AT JS 为 J1939 启用 SAE 数据格式
AT JS 命令关闭 JE 命令执行的自动字节交换。如果您想在不改变任何字节顺序的情况下(即按 SAE 文档中指定的顺序)向 J1939 汽车发送数据字节,请选择 JS 格式。例如,使用 JS 格式发送发动机温度请求(PGN 00FEEE)时,需要按 EE FE 00 传输字节(这也称为 little-endian 字节顺序)。JS 格式默认关闭。
AT JTM1 将 J1939 定时器乘数设为 1
此命令为 SAE J1939 协议将 AT ST 时间乘数设为 x1。从 v2.1 固件开始,此命令只是调用 CTM1。
AT JTM5 将 J1939 定时器乘数设为 5
此命令为 SAE J1939 协议将 AT ST 时间乘数设为 x5。从 v2.1 固件开始,此命令只是调用 CTM5。
AT MP hhhh 监视 PGN hhhh
AT MA、MR 和 MT 命令对于监视典型 OBD 消息报头中的特定字节非常有用。然而对于 SAE J1939 协议,通常需要监视多字节的参数组编号(PGN),它们可能位于报头中,也可能位于数据字节中。MP 命令是一条专用于 J1939 的特殊命令,用于跟踪对特定 PGN 请求的响应。
请注意,此命令不允许指定 PGN 的前两位——它们始终被假定为 00。例如,DM2 的 PGN 值为 00FECB(见 SAE J1939-73)。要监视 DM2,发送 AT MP FECB。
仅当选择了带 SAE J1939 格式化的 CAN 协议(A、B 或 C)时此命令才可用。在其他条件下会返回错误。
AT MP hhhh n 监视 PGN,接收 n 条消息
此命令类似于前一条,但增加了指定 ELM327 在自动停止监视并输出提示符之前应接收的消息数量的功能。值 "n" 为一个十六进制数字。
AT MP hhhhhh 监视 PGN hhhhhh
此命令类似于 MP hhhh,但将提供的字节数扩展了一个,从而可以完全控制 PGN 的定义(不像 MP hhhh 命令那样假定 Data Page 位为 0)。这允许在定义了带 Data Page 位置位的额外 PGN 时用于将来的扩展。请注意,在额外字节中只有 Data Page 位有意义——其余位被忽略。
AT MP hhhhhh n 监视 PGN,接收 n 条消息
此命令类似于前一条,但增加了指定 ELM327 在自动停止监视并输出提示符之前应接收的消息数量的功能。值 "n" 为一个十六进制数字。

监视命令

命令 描述
AT MA 监视所有消息
此命令将 ELM327 置于总线监视模式,在该模式下它持续监视(并显示)在 OBD 总线上看到的所有消息。这是一个静默监视器,不会为 J1850 系统发送帧内响应、为 CAN 系统发送确认(除非您用 CSM0 关闭静默模式),也不会为 ISO 9141 和 ISO 14230 协议发送 Wakeup("keep-alive")消息。监视将持续进行,直到您通过 RS232 输入或 RTS 引脚上的活动来停止它。要停止监视,只需向 ELM327 发送任意单个字符,然后等待以提示符('>')形式的响应或 Busy 引脚上的低电平。(将 RTS 输入置为低电平也会中断设备。)等待提示符是必要的,因为响应时间取决于芯片在被中断时正在做什么。例如,如果它正在打印一行的中间,则会先完成它,然后打印 'STOPPED',之后返回命令状态并发送提示符。如果它只是在等待输入,则会更快返回。请注意,停止监视的字符始终被丢弃,不影响后续命令。
如果此命令与 CAN 协议一起使用,且之前设置了 CAN 过滤器和/或掩码(用 CF、CM 或 CRA),则 MA 命令将受这些设置影响。例如,如果之前将接收地址设为 CRA 4B0,则 MA 命令只能"看到"ID 为 4B0 的消息。这可能不完全是所需的——也许应先重置掩码和过滤器(用 AR 或 CRA)。
所有监视命令(MA、MR 和 MT)都通过关闭当前协议(执行 PC)来工作,然后再配置芯片以监视数据。当传递下一条 OBD 命令时,协议将再次初始化,您可能会看到相关消息。此外,根据监视期间所做的更改,可能会出现 'SEARCHING...' 消息。
AT MR hh 按接收方地址 hh 监视
此命令类似于 AT MA,但只显示发往十六进制地址 hh 的消息。这些是 hh 值位于标准三字节 OBD 报头第二个字节、29 位 CAN ID 的第 8–15 位或 11 位 CAN ID 的第 8–10 位的消息。监视会被任意 RS232 字符中断,与 MA 命令一样。
请注意:如果此命令与 CAN 协议一起使用,且之前设置了 CAN 过滤器/掩码(用 CF、CM 或 CRA 命令),则 MR 命令只会覆盖相应的位——其余位保持不变。也许应先重置掩码和过滤器(AT AR)。与 AT MA 一样,此命令以内部关闭协议开始。
AT MT hh 按发送方地址 hh 监视
此命令类似于 AT MA,但只显示由十六进制地址 hh 的发送器发送的消息。这些是该值位于标准三字节 OBD 报头第三个字节或 CAN ID 第 0–7 位的消息。与 MA 和 MR 模式一样,监视会被任意 RS232 字符中断。
请注意:如果之前设置了 CAN 过滤器/掩码,则 MT 命令只会覆盖相应的位。也许应先重置掩码和过滤器(AT AR)。与 AT MA 一样,此命令以内部关闭协议开始。

寻址命令

命令 描述
AT AR 自动设置接收地址
如果内部接收地址与消息发往的地址匹配,则来自汽车的响应将被确认并显示在 ELM327 上。在自动接收模式下,用于接收地址的值会根据当前报头字节选择,并在报头字节更改时自动更新。用于接收地址的值由诸如报头第一个字节的内容,以及消息使用物理寻址、功能寻址还是用户通过 SR 或 RA 命令指定了值等参数决定。自动接收默认开启,J1939 协议不使用。
AT RA hh 将接收地址设为 hh
根据应用的不同,用户可能希望手动设置 ELM327 将响应的地址。此命令关闭 AR 模式并强制芯片只接受发往 hh 的响应。请谨慎使用此设置——根据值的不同,您可能会接受(并确认 IFR)一条本应发给另一模块的消息。要关闭 RA 过滤,发送 AT AR。此命令对 CAN 的用途有限,因为它只跟踪 ID 位的一部分——CRA 命令可能是更好的选择。此外,该命令不影响 J1939 地址。RA 命令与 SR 相同,可互换使用。CAN 扩展寻址使用 AT TA 命令设置的值。
AT SR hh 将接收地址设为 hh
根据应用的不同,用户可能希望手动设置 ELM327 将响应的地址。此命令关闭 AR 模式并强制芯片只接受发往 hh 的响应。请谨慎使用此设置——根据值的不同,您可能会接受(并确认 IFR)一条本应发给另一模块的消息。要关闭 RA 过滤,发送 AT AR。此命令对 CAN 的用途有限,因为它只跟踪 ID 位的一部分——CRA 命令可能是更好的选择。此外,该命令不影响 J1939 地址。RA 命令与 SR 相同,可互换使用。CAN 扩展寻址使用 AT TA 命令设置的值。
AT TA hh 将测试仪地址设为 hh
此命令用于更改当前测试仪(诊断仪器)地址,该地址用于报头、周期性消息、过滤器等。ELM327 通常使用 PP 06 中的值,但 TA 命令允许临时覆盖它。AT TA 影响所有协议,包括 J1939,便于将 J1939 地址从默认的 F9 更改。虽然该命令可以"动态"工作,但不建议在激活协议后更改地址——结果可能不可预测。

可编程参数

命令 描述
AT PP hh OFF 关闭编号为 hh 的可编程参数
此命令关闭编号为 hh 的可编程参数。用 PP hh SV 命令赋予的任何值将不再使用,工厂默认设置将再次生效。该参数新值实际生效的时间由其类型决定。有关类型的更多信息,请参阅"可编程参数"一节(第 72 页)。请注意,'PP FF OFF' 是一条特殊命令,它会关闭所有可编程参数,就像您为每个可能的参数都输入了 PP OFF 一样。可能会以某种方式更改某些可编程参数,使得与 ELM327 的通信变得困难甚至不可能。如果发生这种情况,有一种硬件手段可以一次性复位所有可编程参数。从电路公共端接一根跳线到引脚 28,在为 ELM327 电路上电时保持其在该位置。保持此位置直到您看到 RS232 接收 LED 开始闪烁(这表示所有 PP 已关闭)。此时取下跳线,让芯片执行正常启动。请注意,PP 复位发生得相当快——如果您将跳线保持连接超过几秒钟却没有看到 RS232 接收指示灯闪烁,请取下跳线再试,因为可能存在连接问题。
AT PP hh ON 开启编号为 hh 的可编程参数
此命令开启编号为 hh 的可编程参数。开启后,用 PP hh SV 命令赋予的任何值将在原来使用工厂默认值的地方使用。(所有可编程值在出厂时都设为默认值,因此在赋值之前开启可编程参数不会引起问题。)该参数值实际生效的时间由其类型决定。有关类型的更多信息,请参阅"可编程参数"一节(第 72 页)。请注意,'PP FF ON' 是一条特殊命令,它会同时开启所有可编程参数。
AT PP hh SV yy 可编程参数 hh:设置值 yy
此命令为可编程参数赋值。在用 PP hh ON 命令开启该可编程参数之前,系统无法使用此新值。
AT PPS 可编程参数摘要
此命令显示完整的当前可编程参数集(甚至包括尚未实现的)。每个参数显示为 PP 编号,后跟一个冒号和赋予它的值。然后是一个字符——'N' 或 'F',分别表示参数已开启(on)或已关闭(off)。更详细的说明请参阅"可编程参数"一节。

电压校准

命令 描述
AT CV dddd 将电压校准为 dd.dd 伏
ELM327 在响应 AT RV 请求时显示的电压读数可以用此命令校准。参数('dddd')必须始终以不带小数点的 4 位数字形式提供(假定小数点位于第二位和第三位之间)。要使用此功能,只需用精确的测量仪器读取实际输入电压,然后用 CV 命令更改内部校准(比例)系数。例如,如果 ELM327 显示电压 12.2 V,而您测得 11.99 V,发送 AT CV 1199,ELM327 就会校准到该电压(由于数字舍入,它实际会读为 12.0 V)。有关如何读取电压和执行校准的更多信息,请参阅第 31 页。
AT CV 0000 恢复出厂校准值
如果您正在试验 CV dddd 命令,但没有精确的电压表作为参考,那么您很快就可能遇到问题。在这种情况下,您随时可以发送 AT CV 0000 以恢复 ELM327 的出厂校准值。

Programmable Parameters Summary

The following pages provide a list of the currently available Programmable Parameters. The value shown in the ‘Type’ column indicates when any changes take effect. Possible values are: - I - the effect is Immediate, - D - takes effect after Defaults are restored (AT D, AT Z, AT WS, MCLR or power off/on) - R - takes effect after a Reset (AT Z, AT WS, MCLR or power off/on) - P - needs a Power off/on type reset (AT Z, MCLR, or power off/on)

Type: I — Immediate, D — after Defaults (AT D, AT Z, AT WS), R — after Reset (AT Z, AT WS), P — after Power off/on (AT Z)

PP Description Values Default Type
00 上电或复位后执行 AT MA 00 = ON; FF = OFF FF(OFF) R
01 打印报头字节(AT H 默认设置) 00 = ON; FF = OFF FF(OFF) D
02 允许长消息(AT AL 默认设置) 00 = ON; FF = OFF FF(OFF) D
03 NO DATA 超时时间(AT ST 默认设置) 00 to FF 32(205 msec) D
04 默认自适应定时模式(AT AT 设置) 00 to 02 01 D
06 默认测试仪地址(Source Address) 00 to FF F1 R
07 自动搜索时尝试的最后一个协议 01 to 0C 09 I
09 字符回显(AT E 默认设置) 00 = ON; FF = OFF 00 (ON) R
0A 换行字符 00 to 20 0A R
0C RS232 baud rate divisor when pin 6 is high (logic 1) P baud rate (in kbps) = 4000 ÷ (PP 0C value) For example, 500 kbps requires a setting of 08 (since 4000/8 = 500) Here are some example baud rates, and the divisor to be used:
Baud Rate(kbps)PP 0C value (hex)
19.2D0
38.457.6
19.245
115.223
230.411
50008

Notes:
- 1. The PP 0C value must be provided as hex digits only. The decimal values (listed above in brackets) are only shown for your convenience.
- 2. The ELM327 can only process continuous byte receives at rates of about 600 kbps maximum. If you need to connect at a higher rate, add a delay between the bytes to maintain an average rate of 600 kbps or less.
- 3. A value of 00 provides a baud rate of 9600 bps.
00 to FF 68 (38,4) P
0D 回车字符 00 to 20 0D R
0E Power Control options Each bit controls an option, as follows:
b7: Master enable 0: off 1: on if 0, pins 15 and 16 perform as described for v1.0 to v1.3a (must be 1 to allow any Low Power functions)
b6: Pin 16 full power level 0: low 1: high normal output level, is inverted when in low power mode
b5: Auto LP control (0: disabled 1: enabled) allows low power mode if the RS232 activity stops
b4: Auto LP timeout 0: 5 mins 1: 20 mins no RS232 activity timeout setting
b3: Auto LP warning (0: disabled 1: enabled) if enabled, says ‘ACT ALERT’ 1 minute before RS232 timeout
b2: Ignition control (0: disabled 1: enabled) allows low power mode if the IgnMon input goes low

b1: Ignition delay 0: 1 sec 1: 5 sec delay after IgnMon (pin 15) returns to a high level, before normal operation resumes
b0: reserved for future - leave set at 0
00 to FF 9A R
0F Activity Monitor options.
Each bit controls an option, as follows:
b7: monitor master control (0: disabled 1: enabled) must be 1 to allow b3 to b6
b6: allow wake from Low Power (0: no 1: yes) wakes on shift from no activity to activity
b5: Auto LP control (0: disabled 1: enabled) allows low power mode if the OBD activity stops
b4: Auto LP timeout 0: 30 secs 1: 150 secs no OBD activity timeout setting
b3: Auto LP warning (0: disabled 1: enabled) if enabled, says ‘ACT ALERT’ on timeout
b2: reserved for future - leave set at 1
b1: add exclamation mark (0: no 1: yes). if 1, sends ‘!’ before ACT ALERT and LP ALERT
b0: LP LED (0: disabled 1: enabled). if 1, the OBD Tx LED flashes when in Low Power mode (one 16 msec flash repeated every 4 seconds)
00 to FF D5 D
10 J1850 电压建立时间(毫秒)= (PP 10) × 4.096 00 to FF 0D R
11 监视 J1850 Break 信号(超出限值时报告 BUS ERROR) 00 = ON; FF = OFF 00 (ON) D
12 J1850 Volts (pin 3) output polarity
normal = Low output for 5V, High output for 8V
invert = High output for 5V, Low output for 8V
00 = invert R; FF = normal FF (normal) R
13 Time delay added between protocols 1 & 2 during a search setting (in msec) = 150 + (PP 13 value) x 4.096 00 = ON; FF = OFF 55 (498 msec) I
14 ISO/KWP final stop bit width (provides P4 interbyte time) setting (in µsec) = 98 + (PP 14 value) x 64 00 to FF 50 (5.2 msec) D
15 ISO/KWP maximum inter-byte time (P1), and also used for the minimum inter-message time (P2). setting (in msec) = (PP 15 value) x 2.112 00 to FF 0A D
16 Default ISO/KWP baud rate (AT IB default setting)
Note:
4800, 12500, and 15625 baud can not be set as defaults
00 = 96;FF = 10 FF(10.4K) R
17 ISO/KWP wakeup message rate (AT SW default setting) setting (in msec) = (PP 17 value) x 20.48 00 to FF 92(3.0 sec) D
18 ISO/KWP delay before a fast init, if a slow init has taken place setting (in msec) = 1000 + (PP 18 value) x 20.48 00 to FF 31(2.0 sec) I
19 ISO/KWP delay before a slow init, if a fast init has taken place setting (in msec) = 1000 + (PP 19 value) x 20.48 If you are having trouble connecting, increasing this time to 5 seconds (C3) may help. 00 to FF 4F (2.6 sec) I
1A Protocol 5 fast initiation active time (TiniL) setting (in msec) = (PP 1A value) x 2.5 00 to FF 0A(25 msec) D
1B Protocol 5 fast initiation passive time (TiniH) setting (in msec) = (PP 1B value) x 2.5 00 to FF 0A(25 msec) D
1C ISO/KWP outputs used for initiation (b7 to b2 are not used)
b1: L line (pin 22) 0: disabled 1: enabled
b0: K line (pin 21) 0: disabled 1: enabled
If disabled, an output will remain low during protocol initiations
00 to FF 03 D
1D ISO/KWP P3 time (delay before sending requests) Ave time (in msec) = (PP 1D value - 0.5) x 4.096 00 to FF 0F D
1E ISO/KWP K line minimum quiet time before an init can begin (W5) setting (in msec) = (PP 1E value) x 4.096 00 to FF 4A(303 msec) D
1F KWP byte count includes the checksum byte? FF = NO;00 = YES FF(NO) R
20 ISO/KWP 5 baud initiation W1 timer start point
The minimum time, measured from the beginning of the Address byte stop bit before the Sync byte may appear.
T = (PP 20 value) x 1.984 msec
Note that the standards define a range for this value from 260 msec to 500 msec.
00 to FF 5D(185 msec) R
21 默认 CAN 静默监视设置(AT CSM) FF = ON; 00 = OFF FF(ON) R
24 CAN 自动格式化(AT CAF 默认设置) 00 = ON; FF = OFF 00(ON) D
25 CAN 自动流控制(AT CFC 默认设置) 00 = ON; FF = OFF 00(ON) D
26 CAN 填充字节(用于将 CAN 消息补齐到 8 字节) 00 to FF 00 D
28 CAN Filter settings (controls CAN sends while searching)
The bits of this byte control options, as follows:
b7: 500 kbps match 0: ignored 1: required
b6: 250 kbps match 0: ignored 1: required
b5 to b1: reserved for future - leave set to 1
b0: send if bus is quiet 0: not allowed 1: allowed
00 to FF FF D
29 输出报头时打印 CAN 数据长度(DLC)(AT D0/D1 默认设置) 00 = ON; FF = OFF FF(OFF) D
2A CAN Error Checking (applies to protocols 6 to C).
Each bit of this byte controls an option, as follows:
b7: ISO15765 Data Length 0: accept any 1: must be 8 bytes
b6: ISO15765 PCI = 00 0: allowed 1: not allowed
b5: Search after ERR94 0: normal 1: CAN is blocked
b4: Search after LV RESET 0: normal 1: CAN is blocked
b3: Wiring Test 0: bypass 1: perform
Processing 7F xx 78’s:
b2: enabled (CAN & KWP) 0: no 1: yes
b1: valid Modes (xx values) 0: all 1: only 00 to 0F
b0: valid CAN protocols 0: all 1: only ISO15765
00 to FF 3C D
2B Protocol A (SAE J1939) CAN baud rate divisor baud rate (in kbps) = 500 ÷ (PP 2B value). For example, setting this PP to 19 (ie. decimal 25) provides a baud rate of 500/25 = 20 kbps. 01 to 40 02(250 Kbps) R
2C Protocol B (USER1) CAN options.
Each bit of this byte controls an option, as follows:
b7: Transmit ID Length 0: 29 bit ID 1: 11 bit ID
b6: Data Length 0: fixed 8 byte 1: variable DLC
b5: Receive ID Length 0: as set by b7 1: both 11 and 29 bit
b4: baud rate multiplier 0: x1 1: x 8/7 (see note 3)
b3: reserved for future - leave set at 0.
b2, b1, and b0 determine the data formatting options:
b2 b1 b0 Data Format
0 0 0 none
0 0 1 ISO 15765-4
0 1 0 SAE J1939
Other combinations are reserved for future updates – results will be unpredictable if you should select one of them.
00 to FF E0 R
2D Protocol B (USER1) baud rate divisor baud rate (in kbps) = 500 ÷ (PP 2D value). For example, setting this PP to 0A (ie. decimal 10) provides a baud rate of 500/10 = 50 kbps. 01 to 40 04(125 Kbps) R
2E Protocol C (USER2) CAN options.
Each bit of this byte controls an option, as follows:
b7: Transmit ID Length 0: 29 bit ID 1: 11 bit ID
b6: Data Length 0: fixed 8 byte 1: variable DLC
b5: Receive ID Length 0: as set by b7 1: both 11 and 29 bit
b4: baud rate multiplier 0: x1 1: x 8/7 (see note 3)
b3: reserved for future - leave set at 0.
b2, b1, and b0 determine the data formatting options:
b2 b1 b0 Data Format
0 0 0 none
0 0 1 ISO 15765-4
0 1 0 SAE J1939
Other combinations are reserved for future updates – results will be unpredictable if you should select one of them.
00 to FF 80 R
2F Protocol C (USER2) baud rate divisor. baud rate (in kbps) = 500 ÷ (PP 2B value) For example, setting this PP to 19 (ie. decimal 25) provides a baud rate of 500/25 = 20 kbps. 01 to 40 0A(50 Kbps) R

DoIP 扩展(ScanDoc)

ScanDoc 适配器通过支持 DoIP(Diagnostics over Internet Protocol,ISO 13400)扩展了 ELM327 协议。这使得可以通过熟悉的 ELM327 AT 命令接口对现代汽车进行以太网诊断。

DoIP 协议(ISO 13400)详细说明 →


BMW HSFZ 扩展(ScanDoc)

ScanDoc 适配器通过支持 BMW HSFZ(High Speed Fahrzeug Zugang)扩展了 ELM327 协议。这是 BMW 用于以太网诊断的专有协议,采用 1 字节寻址和不带 Routing Activation 的简化帧格式。

BMW HSFZ 协议详细说明 →


OBD 命令示例

在普通模式下(不带 AT 前缀),命令直接发送到汽车。命令以十六进制字节书写:

命令 描述
01 00查询支持的 PID(Mode 01)
01 0C读取发动机转速
01 0D读取车速
03读取已存储的故障码(Mode 03)
04清除故障码(Mode 04)
09 02读取 VIN 码(Mode 09)