英创信息技术IRIG-B码校时在WEC7主板ESM335x上的实现

esm335x是英创公司推出的基于ti am335x cortex-a8 cpu的高性能工控主板,板载了丰富的应用通讯接口,如lvds/ttl标准显示接口,4usb、6串口、双can、双网口等。除此之外,esm335x还引出了一组精简isa总线,我们基于esm335x的isa总线设计了一系列扩展模块,比如8串口扩展模块eta508、双网口扩展模块eta728和4路can总线扩展模块eta704,使得esm335x能够满足更多复杂的工业应用,比如通讯管理机。当然用户也可以利用esm335x 的isa总线扩展自己的专有应用模块,以适应特定的现场应用需求。
在电力、交通、电信等行业,一般要求设备具有高精度的时钟,通常由时钟源提供高精度的时钟信息输出,而设备需要有自动校时和时钟同步的能力,irig-b是目前广泛应用的较时方案之一,本文就将介绍esm335x通过gps时钟源产生的irig-b(dc)码实现时间同步的方法。
irig是美国靶场司令委员会制定的一种时间标准,其中的串行时钟编码共有6种格式,即a、b、d、e、g、h。它们的主要差别是时间码的帧速率不同,广泛应用的irig-b即其中的b型编码,b型码的时帧速率为1帧/s,可传递100位信息。图1是igig-b码示意图,其时帧周期是1s,每秒100个码元,使用脉宽编码方式,每个码元脉宽10ms,共三种码元,其中高电平5ms和2ms分别表示二进制 “1”,“0”,高电平8ms为位置标识,分别为p0,p1,…p9。连续两个8ms宽度脉冲的第二个8ms脉冲的前沿为秒准点标志,也是一个时间格式的帧参考标志。一个时间格式帧包含了秒,时,分,天数,年份,控制位等丰富的信息。
图1:irig-b码标准
上面是对irig-b码的简单介绍,在实际使用irig-b码时钟源与esm335x进行时间同步时,用户并不需要关心irig-b码的具体含义和实现方法,仅需要将b码脉连接到esm335x的较时引脚就可以了,esm335x的驱动程序将完成b码解码、同步等工作。
esm335x(em335x)使用gpio6作为b码脉冲输入管脚。
由于gpio6还复用了pwm功能,所以当使用较时功能时,系统的“pwm1:”则不可用。另外需要特别注意的是:esm335x(em335x)所有gipo的最高输入电压不能超3.3v,否则将损坏主cpu,所以在连接b码信号时应该根据实际情况增加相应的电平转换电路。
应用程序打开设备igb1:后,对应的驱动程序就会根据注册表的设备,自动进行时间同步,下面是irig-b码校时的例子代码:
#includestdafx.h
#include
#includebsp_drivers.h
#defineioctl_irig_b_get_time
ctl_code(file_device_bus_extender, 4055, method_buffered, file_any_access)
#defineioctl_irig_b_sync_now
ctl_code(file_device_bus_extender, 4056, method_buffered,file_any_access)
int_tmain(intargc, _tchar* argv[])
{
handle hirigb;
systemtime systime;
dword dwtimeoues;
// 打开系统较时功能,驱动程序会根据注册表的设置自动较时
hirigb = createfile(text(igb1:),
generic_read|generic_write,
file_share_read|file_share_write,
null,
open_existing,
file_flag_random_access,
null);
if(hirigb == invalid_handle_value)
return-1;
// 立刻进行一次时间同步,超时时间设置为3000ms
dwtimeoues = 3000;
if(deviceiocontrol(hirigb,
ioctl_irig_b_sync_now,
&dwtimeoues,
sizeof(dword),
&systime, // 如果时间同步成功,返回当时系统时间
sizeof(systemtime),
null,null))
{
retailmsg(1, (text(time: %04d-%02d-%02d.%02d:%02d:%02d\r\n),
systime.wyear, systime.wmonth, systime.wday,
systime.whour, systime.wminute, systime.wsecond));
}
else
{
retailmsg(1, (text(tiem sync faild!!!\r\n)));
}
// 查看最近一次同步的时间,如果返回失败表示时间未同步
if(deviceiocontrol(hirigb,
ioctl_irig_b_get_time,
null,
0,
&systime,
sizeof(systemtime),
null, null))
{
retailmsg(1, (text(sync time: %04d-%02d-%02d.%02d:%02d:%02d\r\n),
systime.wyear, systime.wmonth, systime.wday,
systime.whour, systime.wminute, systime.wsecond));
}
// 关闭较时功能
closehandle(hirigb);
return0;
}
用户可以通过修改系统注册表来配置灵活的校时方案,通过注册表的设置,驱动程序可自动实现时间秒同步、分钟同步、小时同步或日同步,对应的注册表项如下:(下面的注册表键值为系统默认值)
[hkey_local_machine\drivers\builtin\igb1]
prefix=igb
dll=irig_b.dll
priority256=dword:88
; autosync =0: 禁止校时功能; =1: 秒同步; =2: 分同步; = 3: 小时同步; = 4: 日同步
autosync=dword:2 ; minute sync
; syncminute:当autosync为小时同步时,在syncminute分钟进行同步
syncminute=dword:3b ; 0x3b = 59 -> minute on sync
; synchour: 当autosync为日同步时,在synchour小时进行同步
synchour=dword:17 ; 0x17= 23 -> hour on sync
传统的工控板卡在对irig-b码处理时,通常需要增加额外的硬件(如单片机,fpga)对b码进行解码,然后再通过串口、总线或其它形式将数据交给主控板卡处理,增加了系统成本和操作难度,esm335x可直接对b码进行解码,不需要增加任何硬件就能实现毫秒级精度的时间同步,大大降低了系统复杂程度,节约了成本,提高了系统稳定性。

紫光发表《关于旗下境外债异常波动的声明》
我国深入推进“互联网+”:增强工业互联网产业供给
2019年欧洲智能家居市场销量增长20%,预计2024年将达到2.011亿
巴西高等法院遭遇网络攻击,被称为有史以来最严重
米家扫拖机器人1C上市并同步发售,搭载高速视觉导航系统
英创信息技术IRIG-B码校时在WEC7主板ESM335x上的实现
从概念到生产再到销售:了解 NVIDIA AI 和 Omniverse 如何帮助汽车制造商实现全工作流的数字化升级
虚拟现实VR内容市场:消费级内容的增长,企业级的爆发
Premier Farnell是全球技术领导者,致力于科技产品和电子系统设计
德州仪器推出具有集成限流开关的同步DC/DC升压转换器TPS
贴片电容发展简史!贴片电容的制作工艺和流程
EDA企业培风图南完成数千万元A++轮融资
就凭这四点:年轻人也应该买一块览邦WACH MAX-A90智能手表
自主可控的汽车操作系统将成为未来智能汽车科技竞争的高地
网易为什么选择在VR行业进行投资
私用5G网你该知道一些什么
如何将FPGA程序固化到外部Flash存储器
App Store Connect12 月 23 日至 12 月 27 日期间无法使用
高效临界模式SEPIC PFC电路设计
矢量信号发生器E4438C自检报错维修