From 6c564b25384228565d2f718929e026b855f5a493 Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Thu, 25 Apr 2019 20:46:42 +0200 Subject: [PATCH] Update docs. --- coordinator/README.md | 71 ++++++++++++++++++ coordinator/Z-Stack_3.0.x/CHANGELOG.md | 2 +- coordinator/Z-Stack_3.0.x/COMPILE.md | 9 ++- coordinator/Z-Stack_3.0.x/README.md | 8 -- coordinator/Z-Stack_3.x.0/README.md | 12 --- coordinator/Z-Stack_Home_1.2/CHANGELOG.md | 6 ++ coordinator/Z-Stack_Home_1.2/COMPILE.md | 17 +---- coordinator/Z-Stack_Home_1.2/README.md | 25 ------ .../Z-Stack_Home_1.2/images/target.png | Bin 18486 -> 0 bytes 9 files changed, 85 insertions(+), 65 deletions(-) create mode 100644 coordinator/README.md delete mode 100644 coordinator/Z-Stack_3.0.x/README.md delete mode 100644 coordinator/Z-Stack_3.x.0/README.md delete mode 100644 coordinator/Z-Stack_Home_1.2/README.md delete mode 100644 coordinator/Z-Stack_Home_1.2/images/target.png diff --git a/coordinator/README.md b/coordinator/README.md new file mode 100644 index 0000000..0dbe626 --- /dev/null +++ b/coordinator/README.md @@ -0,0 +1,71 @@ +# Z-Stack coordinator firmwares +This repository contains various Z-Stack coordinator firmwares. + +## Overiew + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Z-StackDeviceZigbeeDirect childrenSource routing# of 3.0 devices
Z-Stack_Home_1.2CC25311.2 HA25No-
CC25301.2 HA21No-
CC2530 + CC25911.2 HA21No-
CC2530 + CC25921.2 HA21No-
Z-Stack_3.0.xCC25313.015No40
Z-Stack_3.x.0CC2652R3.0TODOTODOTODO
+ +### Legend +- *Z-Stack:* Z-Stack is the Zigbee stack for Texas Instruments Zigbee devices +- *Device:* The Zigbee hardware +- *Zigbee:* Zigbee version, for more information read [What's New in Zigbee 3.0](http://www.ti.com/lit/an/swra615/swra615.pdf) +- *Direct children:* Number of children that directly can join the coordinator. Note that this is **not** the maximum network size. For more information, read [the Zigbee2mqtt FAQ about device limit](http://www.zigbee2mqtt.io/information/FAQ.html#i-read-that-zigbee2mqtt-has-a-limit-of-15-devices-is-this-true) +- *Source routing:* Allows the coordinator to remember the routes to the devices. Improves performance for larger (40+ nodes) networks. For more information read [Large ZigBee Networks and Source Routing +](http://cms.digi.com/resources/documentation/digidocs/90001537/references/r_large_zigbee_networks-source_routing.htm?TocPath=Working%20with%20Zigbee%7C_____14) +- *# of 3.0 devices:* Number of Zigbee 3.0 devices that can join the network. Does not apply to Zigbee 1.2 coordinator (no limit). + +## Compiling the firmware +In case you want to compile the firmware yourself, you can find a `COMPILE.md` for each firmware. diff --git a/coordinator/Z-Stack_3.0.x/CHANGELOG.md b/coordinator/Z-Stack_3.0.x/CHANGELOG.md index 5f6e15e..e75f351 100644 --- a/coordinator/Z-Stack_3.0.x/CHANGELOG.md +++ b/coordinator/Z-Stack_3.0.x/CHANGELOG.md @@ -1,2 +1,2 @@ -# 20190424 +# 20190425 - Initial version. \ No newline at end of file diff --git a/coordinator/Z-Stack_3.0.x/COMPILE.md b/coordinator/Z-Stack_3.0.x/COMPILE.md index 2b53209..b821c8d 100644 --- a/coordinator/Z-Stack_3.0.x/COMPILE.md +++ b/coordinator/Z-Stack_3.0.x/COMPILE.md @@ -8,14 +8,15 @@ ## Compiling 1. Copy `firmware.patch` to `Z-Stack 3.0.2` -2. Open Git Bash, go to `Z-Stack 3.0.2` and apply the patch using `git apply firmware.patch`. +2. Open Git Bash, go to `Z-Stack 3.0.2` and apply the patch using `git apply firmware.patch --ignore-space-change`. 3. Open `Z-Stack 3.0.2\Projects\zstack\ZNP\CC253x\znp.eww` with IAR Embedded workbench for 8051. 4. Select the correct target: - For CC2531 select *CC2531 - ZNP-with-SBL* - - For CC2530 or CC2530_CC2591 select *CC2530 - ZNP-with-SBL* + - For CC2530, CC2530_CC2591, CC2530_CC2592 select *CC2530 - ZNP-with-SBL* (not available yet) 5. Right-click on your target and press options. Go to C/C++ compiler -> preprocessor. Depending on what you want to compile, add one of the following symbols to *Defined symbols*: -- `FIRMWARE_CC2530` (TODO) -- `FIRMWARE_CC2530_CC2531` (TODO) +- `FIRMWARE_CC2530` (not available yet) +- `FIRMWARE_CC2530_CC2591` (not available yet) +- `FIRMWARE_CC2530_CC2592` (not available yet) - `FIRMWARE_CC2531` 6. Go to General Options -> Stack/Heap -> Stack sizes -> and change `XDATA` to `0x400`. 7. Press OK. diff --git a/coordinator/Z-Stack_3.0.x/README.md b/coordinator/Z-Stack_3.0.x/README.md deleted file mode 100644 index edfeb1c..0000000 --- a/coordinator/Z-Stack_3.0.x/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Z-Stack 3.0.2 coordinator firmwares -This directory contains CC2530 (TODO), CC2530_CC2591 (TODO) and CC2531 Z-Stack 3.0.2 coordinator firmware. - -## Description -This firmware supports Zigbee 3.0 and allows for 10 **directly** connected devices to the coordinator. - -## Compiling the firmware -In case you want to compile the firmware yourself, read [COMPILE.md](./COMPILE.md). diff --git a/coordinator/Z-Stack_3.x.0/README.md b/coordinator/Z-Stack_3.x.0/README.md deleted file mode 100644 index 71c7915..0000000 --- a/coordinator/Z-Stack_3.x.0/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Z-Stack 3.10.00.53 coordinator firmwares -This directory contains the CC2652R Z-Stack 3.10.00.53 coordinator firmware. - -## Description -- Zigbee 3.0 -- Allow for 30 **directly** connected devices -- Allows for max 40 Zigbee 3.0 devices -- MTO concentrator (stores up-to 100 routes to devices) -- To be used with Zigbee2mqtt - -## Compiling the firmware -In case you want to compile the firmware yourself, read [COMPILE.md](./COMPILE.md). diff --git a/coordinator/Z-Stack_Home_1.2/CHANGELOG.md b/coordinator/Z-Stack_Home_1.2/CHANGELOG.md index e2bec55..0aa3951 100644 --- a/coordinator/Z-Stack_Home_1.2/CHANGELOG.md +++ b/coordinator/Z-Stack_Home_1.2/CHANGELOG.md @@ -1,3 +1,9 @@ +# 20190425 +- Unified firmwares, only one firmware for every device +- Increased direct children to 25 for CC2531 and 21 for CC2530 +- Disabled source routing +- Decreased XDATA size + # 20190315 - Restructured repo - Added `MAX_STABILITY` firmware diff --git a/coordinator/Z-Stack_Home_1.2/COMPILE.md b/coordinator/Z-Stack_Home_1.2/COMPILE.md index fedb2c1..c9a3ccf 100644 --- a/coordinator/Z-Stack_Home_1.2/COMPILE.md +++ b/coordinator/Z-Stack_Home_1.2/COMPILE.md @@ -8,29 +8,16 @@ ## Compiling 1. Copy `firmware.patch` to `Z-Stack Home 1.2.2a.44539` -2. Open Git Bash, go to `Z-Stack Home 1.2.2a.44539` and apply the patch using `git apply firmware.patch`. +2. Open Git Bash, go to `Z-Stack Home 1.2.2a.44539` and apply the patch using `git apply firmware.patch --ignore-space-change`. 3. Open `Z-Stack Home 1.2.2a.44539\Projects\zstack\ZNP\CC253x\znp.eww` with IAR Embedded workbench for 8051. 4. You will get a warning: *The project file 'CC253(0/1).ewp' is in an old format. Would you like to convert it for use with this version?*. Press **yes** for both. 5. Select the correct target: - For CC2531 select *CC2531 - X* - For CC2530, CC2530_CC2591, CC2530_CC2592 select *CC2530 - X* - Depending if you want to compile the `.hex` or SBL firmware select *- ProdHex* or *- ProdSBL* - -![Target](images/target.png) - -6. Right-click on your target and press options. Go to C/C++ compiler -> preprocessor. Depending on what you want to compile, add the following symbols to *Defined symbols*: +6. Right-click on your target and press options. Go to C/C++ compiler -> preprocessor. **Remove** all *Defined symbols* and depending on what you want to compile, add the following symbols to *Defined symbols*: - Device type: `FIRMWARE_CC2530`, `FIRMWARE_CC2530_CC2591`, `FIRMWARE_CC2531` or `FIRMWARE_CC2530_CC2592` -- Firmware type: `FIRMWARE_DEFAULT`, `FIRMWARE_MAX_STABILITY` or `FIRMWARE_MAX_DEVICES`. - In case you want to compile the SBL firmware, also add `FIRMWARE_SBL`. - -To compile e.g the default CC2531 firmware, use: -```c -FIRMWARE_CC2531 -FIRMWARE_DEFAULT -``` - -*NOTE: `FIRMWARE_MAX_DEVICES` is only available in combination with `FIRMWARE_CC2531`.* - 7. Press OK. 8. Right-click on your target and click *Rebuild all*. 9. Once finished, you can find the `CC253(0|1)ZNP-Prod.(hex|bin)` file in `Z-Stack Home 1.2.2a.44539\Projects\zstack\ZNP\CC253x\dev`. diff --git a/coordinator/Z-Stack_Home_1.2/README.md b/coordinator/Z-Stack_Home_1.2/README.md deleted file mode 100644 index 433736b..0000000 --- a/coordinator/Z-Stack_Home_1.2/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Z-Stack 1.2.2.a.44539 coordinator firmwares -This directory contains various CC2530, CC2530_CC2591 and CC2531 coordinator firmwares. There are 3 flavours available: `DEFAULT`, `MAX_DEVICES` and `MAX_STABILITY`. - -## What firmware to choose? -As mentioned above, there are 3 different kind of flavours to choose from. What firmware to choose highly depends on what Zigbee network you are planning to use it with. If you don't know what to choose, it's good to start with the `DEFAULT` firmware. Later you can always reflash your device with a different firmware. - -In order to make a good choice, it's recommended to first read [the Zigbee2mqtt FAQ about device limit](http://www.zigbee2mqtt.io/information/FAQ.html#i-read-that-zigbee2mqtt-has-a-limit-of-15-devices-is-this-true) and [Zigbee network](http://www.zigbee2mqtt.io/information/zigbee_network.html). - -### Default -- Allows for 15 **directly** connected devices to the coordinator -- Should be fine for networks till +- 30/35 devices. - -### Max stability -- Allows for 5 **directly** connected devices to the coordinator -- Reported to work fine for 50+ devices (limit not known yet) -- Should be used when experiencing stability issues with the `DEFAULT` firmware. - -### Max devices -- Allows for 44 **directly** connected devices to the coordinator -- Should only be used when: - - All devices will be in close range of the coordinator - - You won't have routers in your network (or almost none) - -## Compiling the firmware -In case you want to compile the firmware yourself, read [COMPILE.md](./COMPILE.md). diff --git a/coordinator/Z-Stack_Home_1.2/images/target.png b/coordinator/Z-Stack_Home_1.2/images/target.png deleted file mode 100644 index c9e42bf69338fc7aa1123c24c0c5c96b04afe8e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18486 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 Dj0y3s