CC2530 Coordinator auto change PAN Address. Problem

Started by SomeThing, August 27, 2013, 10:21:00 PM

Previous topic - Next topic

SomeThing

พอมี Solution ปัญหาแบบนี้มั๊ยครับ อาการนี้จะเกิดเวลา Coordinator ล่ม แล้ว Router ยังอยู่ในระบบ

ตอนนี้ Coor เริ่มต้นมี PAN Address = 0x1234 มี Router 2 ตัว และ ED 2 ตัว

เปิด Coor เปิด Router เปิด ED ตามลำดับ ทุกอย่างปกติ, ED และ Router join Coor
ปิด Coor, Router join กันเอง, ED เปลี่ยนไป Join Router ทั้งหมด
ปิด ED, เปิด Coor, ดูใน Packet Sniffer Coor เปลี่ยน PAN เป็น 0x1235 , เปิด ED , ED ไป join router
กลายเป็นว่าใน RF Channel เดียวมี 2 PAN Network

เรียบร้อย ศูนย์! ตอนนี้ใช้ Project SensorDemo เป็นตัวอย่าง

ตอนนี้คิดว่าปัญหา มาจากเหตุที่ Router ส่ง Beacon message ออกมาตลอด ทำให้ Coor มันเห็นไปว่ามีคนใช้ PAN นี้แล้วนะ
มันเลยเปลี่ยนให้เสร็จสรรพ - -

ที่ลองไปแล้วนะครับ
1. Force startoption ให้ clear network state เสมอ.
2. ลองให้ Coor announce message เช่น 0xFF 0x77 แล้วพอ Router หรือ ED ได้รับ message ให้ Reboot ทั้งหมด
หลักการดี แต่ใช้ไม่ได้ครับ เพราะว่า PAN มันเปลี่ยน Router กับ ED เลยรับ message ไม่ได้ = =

wlasoi

Quote from: SomeThing on August 27, 2013, 10:21:00 PM
พอมี Solution ปัญหาแบบนี้มั๊ยครับ อาการนี้จะเกิดเวลา Coordinator ล่ม แล้ว Router ยังอยู่ในระบบ

ตอนนี้ Coor เริ่มต้นมี PAN Address = 0x1234 มี Router 2 ตัว และ ED 2 ตัว

เปิด Coor เปิด Router เปิด ED ตามลำดับ ทุกอย่างปกติ, ED และ Router join Coor
ปิด Coor, Router join กันเอง, ED เปลี่ยนไป Join Router ทั้งหมด
ปิด ED, เปิด Coor, ดูใน Packet Sniffer Coor เปลี่ยน PAN เป็น 0x1235 , เปิด ED , ED ไป join router
กลายเป็นว่าใน RF Channel เดียวมี 2 PAN Network

เรียบร้อย ศูนย์! ตอนนี้ใช้ Project SimpleAppDemo เป็นตัวอย่าง

ตอนนี้คิดว่าปัญหา มาจากเหตุที่ Router ส่ง Beacon message ออกมาตลอด ทำให้ Coor มันเห็นไปว่ามีคนใช้ PAN นี้แล้วนะ
มันเลยเปลี่ยนให้เสร็จสรรพ - -

ที่ลองไปแล้วนะครับ
1. Force startoption ให้ clear network state เสมอ.
2. ลองให้ Coor announce message เช่น 0xFF 0x77 แล้วพอ Router หรือ ED ได้รับ message ให้ Reboot ทั้งหมด
หลักการดี แต่ใช้ไม่ได้ครับ เพราะว่า PAN มันเปลี่ยน Router กับ ED เลยรับ message ไม่ได้ = =

เป็นครับ ..  ;D

wlasoi

ลอง add เพิ่ม  NV_RESTORE=True กับ NV_INIT=True  เข้าใน f8wCnfig.cfg  ดูครับ ...
หรือ อยู่ใน  Project-->Options-->C/C++ Compiler-->Preprocessor ครับ ( ZC,ZR,ZED ทุกตัว )  (ผิดนิดหน่อย แถม true ไป 2 ตัว .. ^^)

และควรใช้ Stack ตัวใหม่ .. มันน่าจะเป็น bug เห็นเป็นกันเยอะ 


SomeThing

NV_INIT กับ NV_RESTORE มันมีอยู่แล้ว define ตรง Complie Option
และลองเพิ่ม define 2 ตัวที่พี่ว่ามา ในไฟล์  f8wConfig.cfg ไปด้วย ก็ยังแก้ไม่ได้ครับ เหมือนเดิมเด๊ะ

ZStack-CC2530-2.5.1a ที่ผมใช้ นี่ก็เวอร์ชั่นล่าสุดแล้วนะครับ  :-\

wlasoi

ผมเคยแก้ อยู่ ครับจำไม่ได้ทำยังไง ...เดี่ยวสัก 2-3 วัน Test ดู  ขอปั่นงานส่งก่อนแป้บๆ ...
ทิ้งไว้นาน ลืมหมด .. ไม่ได้ทำ ZigBee หันมาทำ protocol พวก SimpliciTi กับ IEEE ก่อน ...  ;D

หลักๆน่าจะเขียน PAN_id ลงใน Flash แล้วอ่านขึ้นมา ครับ

SomeThing

Quote from: wlasoi on August 28, 2013, 01:29:25 PM
ผมเคยแก้ อยู่ ครับจำไม่ได้ทำยังไง ...เดี่ยวสัก 2-3 วัน Test ดู  ขอปั่นงานส่งก่อนแป้บๆ ...
ทิ้งไว้นาน ลืมหมด .. ไม่ได้ทำ ZigBee หันมาทำ protocol พวก SimpliciTi กับ IEEE ก่อน ...  ;D

หลักๆน่าจะเขียน PAN_id ลงใน Flash แล้วอ่านขึ้นมา ครับ

ตอนนี้ก็ใช้วิธีเซฟค่าลง Flash น่ะแหละครับ แต่เอาจริงๆ ผมก็ไม่รู้เหมือนกันว่ามันอ่านค่า Setting ตรงนี้ตอนไหน
เห็นใน Define ZCD_NV_XXX มีครบหมด ก็เลยลองใช้ดู ผมลอง เซทค่า เปลี่ยนค่า แล้วมันใช้ได้ ผมก็ไม่ได้คุ้ยต่อ ก็จบเรื่องเก็บค่า Setting ไป ติดปัญหาเรื่อง Coor นี่แหละ ไม่รู้จะทำไงเหมือนกัน ได้วิธีแล้วบอกมั่งนะครับ

หาไปเรื่อยๆ เจอคนมีปัญหาเดียวกันเป๊ะ ยังกะอ่านกระทู้ตัวเอง - -
http://e2e.ti.com/support/low_power_rf/f/158/t/17611.aspx

วิธีแก้ไข เหมือนที่พี่บอก คือ เช็ก NV_RESTORE Option กับ Start Option

SomeThing

ได้วิธีแก้ปัญหาแบบเกรียนๆ ชั่วคราวแล้วครับ

อธิบายปัญหาเดิมของผมก่อนนะครับ
1. เปิด Coor , coor ส่ง beacon frame broadcast ออกอากาศ
2. Router ที่เปิดไว้ก่อนหน้า ตอบกลับว่ากำลังใช้งาน PAN Address นี้อยู่นะ
3. Coor เห็นมีคนใช้อยู่แล้ว จัดการเปลี่ยน PAN ใหม่ newPanAddress = NVPanAddress + 1
4. คนเขียนเงิบ

Concept
child = router และ end device , parent = router หรือ coordinator
ให้ Child คอยส่ง packet ไปเช็ก parent ตลอด ถ้าไม่มี ack มาเกินที่กำหนด ก็ให้ Child restart แม่มเลย
ใน sapi มี SoftwareRestart function อยู่ก็สบายไป ซึ่งพอมัน Boot ขึ้นมาใหม่ ตัว CC2530 จะอยู่ในสถานะ starting หรือกำลังพยายาม associate ตัว parent ใหม่ (ต้องเซท start option ให้เป็น clear network state ด้วยนะครับ ผมเข้าไป force ในไฟล์ sapi.c เลย ตอนนี้แก้ซะเละทะหมดล่ะ) ซึ่งไอสถานะนี้ มันจะไม่สนใจ beacon ที่ coordinator ส่งมาเลย ทำให้ coor ไม่ได้รับ packet ตอบกลับใดๆ มันจึง start pan network ตามค่าที่คอนฟิกใน NV ได้อย่างปกติ ;D

จบแบบ Happy ending ครับ

wlasoi

เดี่ยว ผมคงได้แก้ ... วันนี้ไปคุยงานมา งานงอก ..จะทำ Time Sychronization กับ IEEE802.15.4 กับ  ZigBee ด้วย .. ปวดตับ ตุ้บๆ
ต้องไปไล่แก้ที่ชั้น MAC Layer เลย คงเดือนหน้า ... อุตส่าห์เลี่ยงไปเลี่ยงมาหลายหน หล่ะ ... ปั่นตัวนี้เสร็จก่อน    :'(