ทำไมตั้งคำสั่ง AT?


15

ทำไมจึงเป็นเช่นนั้น IC สื่อสารทั้งหมด (หรืออย่างน้อยหลายคนหรือมีชื่อเสียงมากที่สุดหรือเป็นที่นิยม) เช่น Bluetooth หรือ WIFI หรือ GSM หรืออื่น ๆ รองรับชุดคำสั่ง AT เหตุใดพวกเขาจึงไม่มี PIN แบบง่ายสำหรับ D / C (Data หรือ Command) เพื่อการสื่อสาร การใช้ชุดคำสั่ง AT มีประโยชน์อย่างไร?

ชุดคำสั่ง AT ใหญ่และใช้เวลาและพื้นที่หน่วยความจำทำให้การสื่อสารในขณะที่คุณสามารถใช้หมุด D / C ง่าย ๆ และส่งจำนวนเต็มเพื่อตั้งค่าการลงทะเบียนหรือส่งข้อมูล


18
คำเดียว: มรดก ... พวกเขาทั้งหมดแกล้งทำเป็นโมเด็มที่เข้ากันได้ของเฮย์สและนับตั้งแต่รุ่งอรุณของเวลา (หรืออย่างน้อยก็ตั้งแต่ยุค 80 ซึ่งเป็นสิ่งเดียวกัน) และไม่ใช่ว่าไม่ใช่เหตุผลที่ดี
brhans

4
ไม่ใช่แค่มรดกเท่านั้น แต่เป็นความคิดที่ดีจริงๆ ตามที่พูดเก่าไป: "สิ่งที่ยอดเยี่ยมเกี่ยวกับมาตรฐานคือมีให้เลือกมากมาย" ฉันต้องการให้ฮาร์ดแวร์และซอฟต์แวร์ทำงานร่วมกับโมดูลการสื่อสารใด ๆ ที่ฉันใช้โดยไม่ต้องกังวลว่าจะพูดภาษาอื่น (ชุดคำสั่ง) มากกว่าที่ฉันเคยใช้มาหรือไม่
Dwayne Reid

7
บังคับ XKCD ที่นี่
bitsmack

1
ในทางทฤษฎีคุณสามารถถอดปลั๊กโมดูล WIFI ของคุณและแทนที่ด้วยหนึ่งจากผู้ขายอื่น และเนื่องจากโปรโตคอลเหมือนกันคุณจึงไม่จำเป็นต้องปรับรหัส
Paul

1
หากมีบางอย่างผิดปกติกับการสื่อสาร / บิตคุณจะไม่ได้รับการตอบสนองที่ถูกต้องเช่น: "ตกลง" ดังนั้นหากคุณจัดการกับมันอย่างเหมาะสมมันก็ค่อนข้างเสถียร การดีบักค่อนข้างง่ายเนื่องจากข้อความมีความหมายในทางใดทางหนึ่ง อย่างไรก็ตามการจัดการนั้นยากที่จะนำไปใช้ คุณต้องตรวจสอบข้อความดังกล่าว และอ่านพวกเขาในแบบที่ไม่ปกติสำหรับ MCU แต่ถ้าคุณทำเช่นนี้อีกครั้งมันจะใช้ได้กับอุปกรณ์ AT อื่น ๆ
Paul

คำตอบ:


27

brhans ถูกต้อง - มรดก

ในปี 1980 Hayes เริ่มสร้าง "Smartmodem 1200" มันล้าสมัยเกือบจะทันทีและเฮย์รีบออก Smartmodem 2400 ในช่วงเวลานั้นไม่มีเวลาสำหรับการเปลี่ยนแปลงการออกแบบระหว่างการออกแบบโมเด็ม ดังนั้น Hayes จึงเป็นคนแรกที่สร้างโมเด็มความเร็วสองแบบที่แตกต่างกันซึ่งยอมรับคำสั่งการเขียนโปรแกรมเดียวกัน! ซอฟต์แวร์ใด ๆ ที่สามารถรับ Smartmodem 1200 เพื่อโทรไปยังหมายเลขโทรศัพท์ก็สามารถเรียกหมายเลข Smartmodem 2400 ได้เช่นกัน

ในขณะนั้นโมเด็มใหม่ทุกตัวต้องใช้เวลาหลายเดือนในการเขียนไดรเวอร์ที่อัพเดต เมื่อ Smartmodem 2400 ออกสู่ตลาดมีไดรเวอร์ที่ใช้งานได้สำหรับ Smartmodem 1200 ดังนั้นจึงไม่ต้องรอเป็นเดือน ทันใดผู้ผลิตรายอื่นก็ตระหนักถึงความได้เปรียบของโมเด็มใหม่ที่มีชุดคำสั่งเดียวกันกับโมเด็มรุ่นเก่า ภายในหกเดือนผู้ขายได้เสนอโมเด็ม "ที่เข้ากันได้กับ Hayes" เป็นทางเลือกเดียว ซึ่งทำให้พวกเขาฟ้องเฮย์ส ดังนั้นทุกคนจึงเริ่มเรียกโมเด็มว่า "เข้ากันได้กับชุดคำสั่ง AT" แต่ยังคงใช้ชุดคำสั่ง Hayes ต่อไป

ในช่วงกลางทศวรรษที่ 80 ไม่มีการสร้างโมเด็มของผู้บริโภคที่ไม่สามารถใช้ชุดคำสั่ง AT ได้ เป็นผลให้ทุกโมเด็มเช่นระบบ comms ใช้คำสั่ง AT มีข้อดีอื่น ๆ เช่นกัน - เนื่องจากชุดคำสั่งคือ ASCII ทุกคนสามารถพิมพ์คำสั่ง AT ด้วยตนเองลงในหน้าต่างเทอร์มินัลเพื่อควบคุมโมเด็ม เนื่องจากโมเด็มของฉันมีการเชื่อมต่อ RJ11 ที่ยอดเยี่ยมฉันจึงเริ่มต้นเซสชันทุกครั้งใน Procomm Plus ด้วย:

AT
OK
ATH1
[dial tone]
ATDT [phone number]

เพียงเพื่อให้แน่ใจว่าฉันได้รับสัญญาณโทรศัพท์ ถ้าฉันไม่ฉันจะไปรอบ ๆ และกระดิกสายเล็กน้อย!


1
จุดดีในการแก้ไขข้อบกพร่อง โปรโตคอล binary บริสุทธิ์ (เช่น datastream หน้าจอ LCD) กำหนดให้คุณออกแบบฮาร์ดแวร์ / เฟิร์มแวร์เพื่อเริ่มพูดคุยกับอุปกรณ์ ชุดคำสั่ง AT ช่วยให้คุณสามารถทดสอบอุปกรณ์ด้วยศูนย์ฮาร์ดแวร์ สิ่งที่คุณต้องมีคือพอร์ตอนุกรม (หรือวันนี้ USB เป็นตัวแปลงอนุกรม) และเทอร์มินัลอีมูเลเตอร์
slebetman

1
หนึ่งการเล่นโวหารขนาดเล็ก ... Winmodems เก็บรักษาความเข้ากันได้ของแอปพลิเคชันระดับกับคำสั่ง AT แต่ความเข้ากันได้ระดับ OS ขัดข้องอย่างสมบูรณ์ Pre-Winmodem แม้กระทั่งโมเด็มภายในที่เชื่อมต่อผ่าน 16550A UART ซึ่งเป็นที่รู้จักกันดีและได้รับการสนับสนุนจาก Linux (เพราะดูเหมือนพวก ISA หรือ PCI พอร์ตอนุกรมปกติกับระบบปฏิบัติการ) Winmodems โยนประแจลิงเข้าที่นั้นโดยการเลื่อนตรรกะระดับสูงขึ้น (Lucent) หรือแท้จริงทุกอย่าง (HSP) เข้าไปในไดรเวอร์ เนื่องจากคำสั่ง AT ของ Winmodem นั้นเสมือนจริงพวกมันจึงมีน้ำหนักทับกระดาษภายใต้ Linux
Bitbang3r

1
ใช่ฉันเคยพิมพ์ด้วยตนเองเช่นกันเนื่องจากมีสายโทรศัพท์แบบหมุน (แต่แอปทั้งหมดที่สมมติว่าทุกคนมีเสียงสัมผัส) :-)
Brian Knoblauch

@slebetman: ฉันชอบเมื่ออุปกรณ์มีตัวเลือกให้รองรับโปรโตคอลแบบไบนารีหรือแบบข้อความ แต่คำสั่ง "AT" เป็นปัญหาแยกต่างหาก ในระบบที่ไม่มีระบบตรวจจับการรับส่งข้อมูลอัตโนมัติไม่มีประโยชน์อย่างใดอย่างหนึ่งกับ "AT" เป็นคำนำหน้าคำสั่งและฉันได้เห็นระบบจำนวนมากซึ่งคำนำหน้าคำสั่งด้วย "AT" แต่ยังต้องการความสามารถในการส่งและรับอักขระนอกหลักการ ชุด ASCII และรหัสควบคุมทั่วไป
supercat

1
IIRC, Linux ในที่สุดก็มีไดรเวอร์สำหรับ winmodems อยู่บ้าง ในหลายกรณีผ่านไดร์เวอร์เสียง ALSA หรือ OSS เพราะซอฟต์โมเดมที่ถูกถอดส่วนใหญ่เป็นการ์ดเสียงที่เชื่อมต่อกับสายโทรศัพท์ IIRC มีความได้เปรียบในการตอบสนองเล็กน้อยจาก winmodems เนื่องจากคุณไม่ได้มีข้อมูลติดอยู่ในบัฟเฟอร์ UART นักเล่นเกมเท่านั้นที่ได้รับการดูแล ทุกคนเกลียดการสูญเสียวงจรจากซีพียูแบบแกนเดียว
Peter Cordes

20

คุณกำลังพูดถึงข้อเสียของชุดคำสั่งเท่านั้น พิจารณา Upsides:

  1. ด้วยการใช้ชุดคำสั่ง AT อุปกรณ์สื่อสารของคุณสามารถวางบนเครือข่าย IP ใด ๆ ทันทีผ่านการใช้PPPของระบบปฏิบัติการ ทางเลือกคือนอกเหนือจากการออกแบบอินเตอร์เฟสโปรโตคอลแบบกำหนดเองคุณต้องเขียนไดรเวอร์อุปกรณ์เครือข่ายของคุณเองสำหรับทุกระบบปฏิบัติการที่คุณต้องการสนับสนุนก่อนที่ระบบปฏิบัติการนั้นจะสามารถใช้อุปกรณ์ของคุณเพื่อเชื่อมต่ออินเทอร์เน็ต

  2. วิศวกรผู้มีอำนาจใด ๆ จะรู้โปรโตคอลนี้แล้ว รับจากคนที่งานประจำวันต้องการให้เขาเข้าใจและใช้โปรโตคอลอนุกรมที่ไม่เป็นมาตรฐานจำนวนมาก: โปรโตคอลทั่วไปที่ได้รับการออกแบบมาอย่างดีจะดีกว่า

  3. ในขณะที่มันเป็นความจริงที่โปรโตคอล AT นั้นค่อนข้างซับซ้อนและใช้หน่วยความจำมากกว่าที่จะใช้งานมากกว่าโปรโตคอลที่สร้างขึ้นเฉพาะงาน แต่ก็เป็นกรณีที่บางคนที่เลือกที่จะใช้โปรโตคอลนี้จะหลีกเลี่ยงการใช้เวลานาน ล้อที่ดีอย่างสมบูรณ์ เขามีความเชี่ยวชาญด้านการออกแบบมาหลายทศวรรษ เขารู้ว่ามันจะทำงานก่อนที่เขาจะยอมรับเวลาในการพัฒนา การออกแบบโปรโตคอลที่ดีนั้นทำได้ยากอย่างน่าประหลาดใจ

    (หนึ่งวันนี้ฉันจะเผยแพร่ผลงานชิ้นโบแดงของฉัน "โปรโตคอลของคุณดูด" ด้วยความหวังว่าจะป้องกันการกระทำผิดของโปรโตคอลแบบครั้งเดียวที่แย่กว่านั้น)


1
ในขณะที่ฉันเห็นด้วยกับความรู้สึก; "ดีวิศวกรรม"? สามคำ: ATSคำสั่ง ...
CVn

อุปกรณ์ส่วนใหญ่ที่ฉันเห็นว่าใช้คำสั่ง "AT" ไม่มีอะไรเหมือนกันในคำสั่งของพวกเขานอกเหนือจากตัวละครสองตัวแรก หากโมดูล WiFi สามารถยอมรับ "ATDT192,168,254,5W1234" เป็นคำสั่งเพื่อเปิดการเชื่อมต่อ TCP ไปยังพอร์ต 1234 ที่ 192.168.254.5 แสดงว่าซอฟต์แวร์ที่คาดว่าโมเด็มสามารถใช้งานโมดูลได้ แต่ฉันยังไม่เห็นใครทำ อะไรเช่นนั้น
supercat

@supercat: นั่นเป็นเพราะโมเด็ม WiFi นั้นคล้ายกับอีเธอร์เน็ตการ์ดมากกว่าซึ่งสามารถเห็นได้จากมาตรฐานที่เกี่ยวข้อง (IEEE802 series) และการใช้ที่อยู่ MAC และในขณะที่คำถามพูดถึง "การสื่อสาร IC" ฉันไม่คิดว่า coomon Ethernet IC ใช้ชุดคำสั่ง AT
MSalters

@MSalters: ในหลาย ๆ สถานการณ์การใช้งานหลักสำหรับโมดูล WiFi จะเป็นการสร้างการเชื่อมต่อ TCP หนึ่งครั้ง การจำลอง Hayes สามารถทำงานได้อย่างสวยงามสำหรับสิ่งนั้น ฉันเคยเห็นไดรเวอร์ FOSSIL ที่จะอนุญาตให้ใช้โปรแกรมเทอร์มินัลตาม DOS เป็นลูกค้า telnet โดยให้พวกเขา "กด" หมายเลขดังกล่าวข้างต้นและฉันคิดว่าวิธีเดียวกันนี้จะทำงานได้อย่างสวยงามกับโมดูล WiFi ในกรณีใด ๆ จุดของฉันคือว่าถ้าผลิตภัณฑ์ที่ใช้สายเช่นข้างต้นเพื่อสร้างการเชื่อมต่อ TCP การใช้งานดังกล่าวจะมีประโยชน์ต่อการทำงานร่วมกัน / ความคุ้นเคยอย่างมีนัยสำคัญ แต่ ...
SuperCat

... ฉันสงสัยว่าอุปกรณ์ส่วนใหญ่ทุกวันนี้ที่ใช้คำสั่งที่ขึ้นต้นด้วย "AT" ทำได้ง่าย ๆ เพราะผู้สร้างของพวกเขาเห็นอุปกรณ์อื่น ๆ มากมายที่เริ่มต้นคำสั่งทั้งหมดด้วย "AT" และตามหลังชุดสูทโดยไม่รู้ว่าทำไมอุปกรณ์อื่น ๆ ดังนั้น.
supercat

14

ฉันจะขยายในอีกด้านของคำถาม ... ทำไมไม่เพียงเพิ่มสายการส่งสัญญาณอื่นในอินเตอร์เฟซ?

สามารถถามได้โดยคนที่ไม่ได้ผ่านการส่งสัญญาณทั้งหมดของสายสัญญาณบนอินเทอร์เฟซ RS232 25 พินที่แท้จริง นอกเหนือจาก TXD, RXD และ Gnd แล้วยังมีสัญญาณอื่น ๆ อีกหลายคู่แล้ว RTS / CTS (พร้อมส่ง, Clear To Send) DSR / DTR (พร้อมชุดข้อมูล, Data Terminal Ready) และพินแฮงเอาท์ฮาร์ดแวร์ และคนอื่น ๆ. และไม่มีข้อตกลงสากลที่ชัดเจนระหว่างผู้ผลิตว่าอะไรทำงานอะไร - ทำไมคุณต้องการสัญญาณจับมือกันสองชุดตั้งแต่แรก? และโพรโทคอล XON / XOFF ซอฟต์แวร์ด้านบนนั้น) (และทำไมเครื่องพิมพ์ Diablo จึงยืนยัน - ไม่ซ้ำกันเท่าที่ฉันรู้ - ในการจับมือกันที่ pin 11?)

อุปกรณ์บางอย่างต้องใช้อินเทอร์เฟซแบบเต็ม บางคนมีความสุขกับ TXD / RXD / Gnd บางคนอาจถูกหลอกให้ทำงานโดยการตัดพินที่ 4 และ 6 (ดังนั้นการวนกลับของ RTS เป็น CTS และบางอย่างที่ควรจะเป็น DCE คือ DTE หรือกลับกันและจะพูดคุยกับสิ่งอื่นผ่านสายเคเบิล "โมเด็มไร้สาย" ที่มีการสลับการเชื่อมต่อแต่ละคู่

จากนั้นเพื่อให้ง่ายขึ้นทั้งหมดนี้ IBM PC ได้แนะนำอินเตอร์เฟส 9-pin ใหม่สำหรับ RS232 ความหมายของการสะสมสายเคเบิลที่มีอยู่ทั้งหมดนั้นล้าสมัยและคุณต้องเริ่มต้นใหม่อีกครั้ง ...

ทั้งหมดนี้ทำให้ชีวิตยากโดยไม่คำนึงว่าปลายทั้งสองอาจถูกตั้งค่าเป็นอัตรารับส่งข้อมูลที่แตกต่างกัน ...

สิ่งนี้สนับสนุนทั้งอุตสาหกรรมที่สร้างขึ้นรอบ ๆ กล่องแยกย่อย RS232 สายเคเบิลและเครื่องมือทดสอบ / ตรวจแก้จุดบกพร่อง

การเพิ่มสัญญาณอื่นในบริบทนี้อาจไม่ได้บิน ...


9

โมเด็ม Hayes ตัวแรกที่ใช้คำสั่ง "AT" เลือก "A" เป็นอักขระตัวแรกของคำนำหน้าคำสั่งเนื่องจากจำเป็นต้องรองรับอัตรา baud หลายตัวและ "A" บนบรรทัดดูเหมือน: -------_-_____-x----------ซึ่งมีอัตราส่วน 5: 1 ระหว่าง เวลาที่สั้นที่สุดและสั้นที่สุด 'ต่ำ' ("x" อาจสูงหรือต่ำขึ้นอยู่กับการตั้งค่าพาริตี) ไม่มีอัตราที่ช้ากว่า 1200 บอดสามารถจัดการเวลา "สั้น" ที่ 833us หรือน้อยกว่าและไม่มีอัตราที่เร็วกว่า 2400 สามารถจัดการเวลา "ยาว" ที่ 4.16ms หรือนานกว่านั้นดังนั้นโมเด็มจึงสามารถสันนิษฐานได้ว่าหากเห็นสิ่งที่ดูเหมือน เช่น 1200 baud "A" เป็น (และเช่นเดียวกันกับ 300 baud เป็นต้น) "T" มีความแตกต่างตรงข้ามจาก "A" ดังนั้นถ้าตัวละครตัวที่สองดูเหมือนว่า "T"

อุปกรณ์หรือไดรเวอร์ที่ใช้คำสั่ง "AT" ซึ่งทำงานคล้ายกันหรือคล้ายคลึงกับคำสั่งโมเด็ม Hayes (เช่นการยอมรับATDTW192,168,254,123W4567ว่าเป็นคำสั่งเพื่อเชื่อมต่อกับพอร์ต 4567 จาก 192.168.254.123) เพื่อให้เข้ากันได้กับซอฟต์แวร์ที่คาดว่าจะคุยกับแบบเก่า โมเด็มหรืออุปกรณ์ที่รองรับ อย่างไรก็ตามมีอุปกรณ์มากมายที่ใช้คำสั่งที่ขึ้นต้นด้วย "AT" ตามทฤษฎีที่ว่า "ชุดคำสั่ง AT" ดูเหมือนจะเป็นคำศัพท์ทางการตลาดที่มีประโยชน์แม้ว่าอุปกรณ์จะไม่สามารถตรวจจับอัตราการส่งข้อมูลอัตโนมัติ อะไรก็ได้บนอุปกรณ์อื่น ๆ การใช้ "AT" เป็นคำนำหน้าคำสั่งในบริบทดังกล่าวไม่เพิ่มมูลค่าความเข้ากันได้และไม่มีวัตถุประสงค์ที่เป็นประโยชน์ นักออกแบบทำเพราะพวกเขาเห็นนักออกแบบคนอื่นทำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.