Introduction to Battery Management Studio (bqStudio)

So as I said, my name is Kevin Main I’m the tools engineer that’s principally responsible for maintaining a battery Management Studio– bqStudio Today I have a little bit of introduction for those of you who are unfamiliar with what bqStudio is and what it’s capable of, but also to talk about some of our longer term plans as a platform and how we’re using that through the broader battery Management Studio product line– not just gauging I’ll talk specifically a little bit about how to use it for gauges– some of the features of automation I’ll talk about design completion for your systems and integrating your implementation of the gauge configuration– or the charger configuration– into your platform, and then provide a few useful links at the end The last bit is feedback and questions, which is of principal importance to me I’m just an engineer I don’t get out of the office that often So the opportunity to get direct feedback a feature set, and what’s confusing and what’s not– what could be enhanced– that’s what I would love to hear from you today, certainly So to start out with introduction– installing bqStudio You’ve seen this link before in a number of the presentations, but– There’s an export control form to download it complete if that’s applicable to your situation You do have to have administrative privileges on the system in order to install it That’s principally because we have some driver architecture associated with supporting the EV2300 adapter that requires administrative privileges But there’s also some static libraries and things that have to get installed and registered, and that does require administrative access But the installer requests that automatically, so as long as you’re a privileged user on the system you’re using it shouldn’t be an issue You just click through the process There is a standalone– should you need it– EV2300 64-bit driver It’s available through e2e There’s a link up there, but also I’d search for it on e2e for the location, because that’s not a permalink So if you’re using EV2300 in a 64-bit environment, and you have administrator privileges on your system, there’s a standalone 64-bit driver for support for that should that be necessary But most of what we do today, and going forward, is around the EV2400 which doesn’t require any additional driver support in Windows It just works as is So bqStudio is the proprietary TI battery management solution It’s a suite of tools that scales all the way from simple automated operation– like you saw with the battery management development kit that we’re working on, if you looked at the previous program or saw that just before lunch– all the way through really advanced configuration and tools and debugging and verification It supports not only gauges, but also chargers, protectors, monitors– you should protect your system The idea is a single suite of tools that’s extensible and flexible, and supports the full product line– supports the full ecosystem, in a way So if you’re using multiple products we can deal with that gracefully in a single application Its function is to help you evaluate battery management solutions products, to implement them in your system, to program them, calibrate– you know, configure chemistry and so on– set it up for your platform requirements, and then validate the configuration and make sure things are working the way that you like And this involves both workspaces, views, and plug-ins You saw one example of a workspace with BMDK earlier Battery management studio is built on Eclipse, which is a open source Java platform that is flexible It’s configurable It’s used for a variety of applications in industry It’s well-maintained, and it gives us a long-term trajectory for cross-platform support, should we want to implement that and develop it based upon customer requirements But right now we target windows, of course It’s robust It’s efficient We have a c++ and Java based framework within Eclipse that’s used for all hardware communication across BMS [INAUDIBLE] and so that library gets utilized in our entire toolset, both internal and external And so it’s gets really wrung out, and is efficient and well-thought out Then we have Java based plug-ins running within the Eclipse environment that provide specific functionality for particular devices and product lines based on the particular hardware that’s attached or the product that you want to use it for Each plug-in is contained within its own workspace tab I’ll show you a level picture in a minute And workspaces and views are customized to specific devices So if you’re using a charger, it looks like a suite of charger applications If you’re using a gauge, it’s a suite of gauge applications– again, tailored specifically to the device you’re using For gauges, of course, basic functionality– low level functionality We do reads and writes of registers We do reads and writes of data flash, or data memory locations We can load and save those from files We can restore the defaults if something is– you know, you’re not sure what’s going on and you want to get it back to a factory refresh state We can do that very easily We have logging support with configurable sample rates– I’ll talk a little bit more about that in a minute– but logging of both registers and data memory

We can send commands manually There’s advanced comm plug-in if you want to do low level hardware communication, test out a sequence of low level commands that you might be wanting to use in a production environment You can reproduce that with the advanced comm plug-in bqStudio supports I2C, HTQ, and the SMBus communication And there’s additional plug-ins apart from just basic low-level functionality to assist you in the process of integration So you can update the firmware, for example– the programming firmware commands There’s a commands plugin for doing things like seal and unseal, and sleep, and so on– issuing straightforward commands to the gauge Watch and datagraph plug-ins lets you watch and graph specific parameters or registers along the way, so you can see what’s happening in the system Specific plug-ins for calibration, chemistry, or walking you through a process of question and answer– questions that need to be answered in order to configure some of the more advanced, highly accurate gauges specifically to the needs of your platform There’s plug-ins for dealing with authentication– SHA-1, SHA-2, and so on Learning cycle and GPC cycle I’ll get in a bit more detail here in a few minutes And then the production ready process, which involves goldenizing, golden image, and GPC packaging CEDD gauges I’ll talk about that briefly as well So here you see this is a single cell EVM, in this case, hooked up You’ve got a simple– in this case, a four wire cable that’s hooked up through the I2C, in this case comm interface It’s going to whichever adapter you’re using It can be the 2300, EV2400, or something similar And then your pack hooked up to the EVM in that scenario So that’s the basic setup In the case of a gauge, if you hook this up and run bqStudio, it should auto detect the gauge that you have, load the configuration, and automatically bring you up with something that looks similar to this So this is the high level gauge lay out for bqStudio You see immediately available are the registers for the system It’s that these are the initially sample values as bqStudio launched of all of the registers These are the bits specific to registers that have fields or command bits or status bits associated with them Here’s the commands plug-in over here So if you want to issue low level commands on the interface– get the Kim ID, or get the hardware version or firmware version– the output of that will show in the log panel down here And then of course, the dashboard, which I’ll get to The additional functionality available for the device that you’ve created is all available through these icons up here So these are all additional plug-ins for goldenizing, for converting to HDQ interface in this case, or there’s the advance comm I mentioned, chemistry programming, and so on So by simply pushing the buttons you can open the additional functionality And this is an active manageable workspace– so you can dock things, and scale things, and create a workspace that’s usable for what you’re doing at any given time I’ll talk a little bit about the dashboard you saw there on the left for gauges It’s open and monitoring It allows you to get an instant glance– to know that this is what’s going on in the system It’s hooked up through this adapter This is the gauge that’s attached, and here is it’s current readings and current voltage, temp, and so on So it gives you a snapshot of what’s happening in the system It’s updated every four seconds It does do some tracking in terms of a bit of a heartbeat, so if you’re doing things at a low level communication point, and you want like atomic or fixed access or nothing else is going on in the communications interface for what you’re doing, you’re going to want to disable that I’ll show you that in a minute But be aware that the dashboard is there, and it’s monitoring, and it’s tracking, and it’s reading in much the same way that a platform would read– voltage, temp, current, et cetera– on a regular basis, as well as the state of charge and so on Some significant problems in the past with the dashboard interfering with log functionality– specifically if you had kind of long wires connecting to your comm interface because you were debugging– if there was a comm error, the dashboard could get confused and freeze the logging We did a lot of enhancements to the dashboard about a year ago to resolve most of those problems So unless you’re doing low level comm or high frequency, high resolution logging, the dashboard probably won’t interfere with you But nonetheless, you can– by clicking on the top– the auto-refresh is on by default unless you’re using an HDQ gauge It comes up disabled by default on HDQ But you can just click that to turn off the auto-refresh And that effectively locks the dashboard so that it’s not doing anything at all on the communications interface That means if your hardware goes away, it may still look like there’s something, right? It just freezes the input, and it no longer has any activity on the bus There is an Advanced View, which is useful if you’re really trying to learn how the gauge works, or how it works– you know specifically what you want to do Under the Preferences menu under Windows– so you go to Window, Preferences– there are several different options here for the various plug-ins But under all global settings there is an Advanced View option For the registers, the Advanced View

gives you groups of 16 bits And it lets you– this is really the important feature, I’ll mention it– it lets you customize the registers that are logged and scanned by the register plugin So if you want to really whittle down to a really high frequency log just for IVT for example, then that lets you select just down to that parameter set So here’s an example of the 16-bit fields and so on You’ll see these additional checkboxes– a little hard to see from there, but the log scan option for those fields– basically ticking those on and off will include those in the scan refresh or in the log itself So the idea of a log is simply a periodic scan that’s getting saved to a file Scan is simply periodic periodically scanning all of the registers and updating the UI itself The data memory, which is in flash or depending on the gauge, but the data memory parameters are kind of more static This is where your gauge kind of configuration space is, as opposed to the operating conditions Very similar– so you can see that the individual classes of parameters So there’s configuration, gas gauging, security, and so on for this particular gauge And then you’ve got groups within that of parameters themselves, and then individual parameters So for example, CC gain here is 9.999 And this shows you the state Just like the register window for parameters that are read-write, you can go through this interface, click on it, update the value you want and it’ll get written to the gauge In Advanced View, data memory adds the subclass ID Block Offset Length, and importantly adds Address Length as well as native units Some of the parameters are stored in the gauge in a way that is not consistent with the units that you typically want to use it in And so bqStudio automatically does that translation But if you use Advanced View, you can actually see the low level content in the gauge and the units that are used to speak directly to the gauge, as opposed to having that worked through a conversion or formula for the sake of usability And the importance of address and length or subclass block offset, again, is that gives you information that you can then use to build command sequences if you want to in your own environment, in your firmware in your software, or your production environment do low level commands So for example, for this gauge, you can see these are the subclass IDs, the block length, the number, and the offset that is available to you if you want to update or read any of these particular parameters on the comm interface at a low level I mentioned logging at a faster rate By default, again, we’re in the preferences window here So windows preferences, that was Show Advanced Views If you look at the register setting, there is a setting up here for Scan Log Interval In this case I’ve set that to 1,000 That’s not the default But you can set this down reliably to 1,000 for many gauges if you eliminate all other comm activity by disabling the dashboard and whittling down the number of parameters That allows you to do really high resolution logs, as again I said, for the critical parameters– like you want to do temperature, voltage, and so on You can see here in this example, all the other fields in advance you have been unchecked So when the log or the scan is running, it will only specifically read in this case, temperature and voltage And it’ll store those in a file So here’s an example of what that looks like It’s a comma separated format, so you can parse this pretty easily in your own tool if you like So there’s basically a date-time stamp There’s a sample iterator indicator number There’s an indicator of how many seconds have elapsed since the log was started, and then the raw data that’s read out of those values, and then an indicator of success or fail If there’s a fail it will indicate fail, and there’s a failure log that’s generated and it points you to that when that happens So you can get more detail about what went wrong Talk a little bit about calibration This is quite common to use for most gauges– single cell and multi-cell But the calibration plug-in allows you, in multiple steps or all at once, to calibrate CC offset, board offset, calibrate your temperature current and voltage This is a single cell example of that So this gauge has internal and external temp You can calibrate each individually based on how the gauge is configured It’s showing you, in real time, the status of the gauge So it’s showing you what the gauge sees is temp voltage, current, and so on And then you simply indicate your calibrated fixed known good current, voltage, temperature number Check that you want to calibrate which entries you want to calibrate And hit calibrate, and it goes off in the process of doing that You’ve heard a lot about chemistry if you’ve been in some of the other more technical tracks So the chemistry files are required for the Impedance Track gauges and many of the CEDD gauges Chemistry files basically contain, at a very high level, the characteristics of the chemistry within a particular cell or battery So each chemistry in our cases is identified by a unique chem ID that’s tied to a manufacturer and model and so on And the chemistry plug-in it allows you to program these

In this case, for this gauge, you can see there’s a list as you launch the chemistry plug-in of all the manufacturers and the models associated with that, and the chem ID number, and then the description One question I know that comes up is the chemistry ID, really, the number itself indicates a unique chemistry So you see multiple chemistries with a particular ID, and you’re like which manufacturer do I use– or which model number? They are all equivalent if the ID itself is the same So you can select the particular chemistry you want, say program selected chemistry, and off it goes I want to mention, because this is important– under the Help menu there is update chemistry We are updating this on a regular basis as we get new data for new cells and new packs That’s getting added So you can follow the link through the Help Update Chemistry to get a chemistry updater, so that you don’t have to re-install the whole of bqStudio, or get the exact freshest latest version of the chemistry database You can do that through there You can also go to to get the latest chemistry tables I’m going to talk briefly about automation So there’s a few basic plug-ins, but I want to talk about the ways that you can do some automation with all gauges in bqStudio So for a lot of our single cell gauges and a handful of multi-cell we have a learning cycle plug-in It operates in three different modes If you’re using the GDK, it can do that I won’t go into detail for that today But the distinction between manual and automated mode is essentially how much user interaction is required during the learning cycle process So at a very high level, what you’re doing is you’re discharging the battery to empty, then you’re going through a full cycle– basically charge to full and discharge, with some relaxed periods in there depending on the requirements of the hardware platform you’re using For manual mode, there’s basically user prompts to guide you through that process So it instructs you to connect your load so it can do the initial discharge It tells you when it’s relaxing And it says, OK, now I’m ready Let’s attach the charge current so you can apply the charge current It begins with the charge portion of the learning cycle, et cetera So it walks you through the process, prompting you as a user to do this For automated mode, it can use additional available pins on your adapter– whether that’s the 2300 or the EV2400 And we provide schematics and documentation on how to do this And a number of the gauge have on screen prompting, if it’s supported for the gauge, to show exactly how to look this up But the idea with automated mode is we can use additional pins on the adaptor that are automatically toggled so that you, in your environment, can switch on and off relays and automatically apply the charge and discharge cycles as it goes Which means that the learning cycle process for impedance track gauges becomes kind of set it and forget it You can just start the process off and let it run The relays will toggle your charge and discharge cycle, and then in the end you’ve got a usable log Once you select one or the other– manual or automatic– then you can basically set up the particular parameters for the learning cycle you want to run This is automated, so it’s saying, OK, I want to use this as the load control pin and this is the charge control pin Depending on the adapter you use, it will give you the available options And you can test them So once you hook up your environment, you can use those test buttons and it’ll toggle the pins So you can watch it toggle and make sure that you’re ready to go Then there’s the charge set up and so on So for the charging– you know, there are various– depending on the gauge there are charge termination options and discharge termination options How does it know when to move on? You know, when is the gauge fully charged, and when is it fully discharged? And how is it learned? And in the Control panel itself, there’s basically a start button with an output log For the GPC cycle, this is for the CEDD gauges that are going to use the gauge parameter calculator, available as the web tool– again, a very similar interface So you set up the discharge condition and the charge condition if it’s applicable There is an important new window when you run the GPC cycle, which is to specify the log output location Because with learning cycle, you kind of generate your own log for the parameters that you want, if you decide you want to do that as part of your learning cycle But logging is kind of optional For the GPC cycle, it’s required if you’re going to use the gauge parameter calculator So the logs– you’ll specify an output location, and it will generate the logs as you go The current version of the tool walks you through the sequence of cycles that are necessary for the GPC to do the best job, which is different loads, different temperatures, and so on So there’s a sequence of six cycles that have to be fully completed And depending on whether you’re manual or automated mode, it’ll either walk you through that process as the user step by step, or it’ll automate portions of those cycles and then prompt you to do things like change temperature However, I want to mention just– I can’t show screen captures It’s something we’re working on now But for early next year, we have a lot of user interface enhancements coming to both learning cycle

and GPC cycle Much better status information– in terms of showing you where it is in the cycle– some immediate visual feedback, so you can see, OK, this is about how much longer I have left, and this is where I am in the cycle and it’s relaxing, and here’s the last– or real time feedback of what voltage and current it’s reading So lots more robust feedback over the process of the learning cycle, or the GPC cycle, as well as for the GPC allowing random access rather than forcing you to walk through all of the cycles in a particular process It’ll be able– once you specify your log output location– it’ll say OK what you’ve already ran these particular cycles So here’s what’s left that you need to do Which one of these do you want to start? And it lets you kick off that process– again, still in a manual or automated fashion So again, I can’t show it yet But watch for that coming very soon next year Briefly I’ll mention auto-cycle For multi-celled gauges within the register plug-in, there is an ability to do auto cycling Basically, in a very similar way to the learning cycle plug-in for single cell Impedance Track gauges, you can control charge and discharge through a number of ways Basically, it monitors the state of the gauge So if you– again, windows preference menu If you look for the registers, if that’s available to you, it will have conditions to start the charge and start the discharge So you can check your options here– you know, relative state of the charge drops below 7%, or battery voltage drops below 11 volts, or so on And you can specify some additional values And then this is important– take action when any condition is met or all condition is met So the termination of the charge and the discharge is based upon the configuration that you set up in these two windows to run the auto cycle And, again that’s all managed by the register’s plug-in for the multi-cell, because most of the multi-cell gauges– we have a handful of multi-cell gauges that are supported in the [INAUDIBLE] cycle plugin, but many of them are not A little bit about design completion– if you use the GPC cycle, or you generated your own logs and you want to run the GPC packager, this is the way you take those logs and wrap them up in a way that you can use the gauge parameter calculator tool on the web So in this case, there’s six log files it’s looking for Zero degrees C discharge taken with average max discharge, half average max discharge, again at zero, 25, and 40 So these are the six logs that you can specify You give it an output file location for your package You can configure the number of cells, SOC percent, where FCC learned, and so on Set up a few parameters associated with your system Load the log files into memory, and then at the very bottom is this generate package button that will create a single file, that’s a package, that you can then take to the gauge parameter calculator online So this is the way within bqStudio that you would generate the input to that for configuring the Chem ID and so on for your single-cell or multi-cell gauge that use CEDD For single-cell gauges, there is a golden image plug-in that creates output formats that can be used to program other gauges to make copies of your configuration, or even in your production environment And the available output formats is gauge dependent, so again for this particular gauge there’s opportunity to output an S Rack, a bqFS, a DFS Those are all flash stream formats The FS files are used in different ways What’s important to understand about FS files is they represent raw bytes that one could then put on an I2C or HDQ interface to perform that programming functionality So that’s something that’s a very versatile format that you can take into your production environment to program gauges, or in your operating system environment to program some of the parameters at runtime, should you want to do that Each of the file formats may offer options depending on the gauge and the format itself So example, by default all these formats output I2C commands But for gauges that support it, you may want an HDQ format version of your flash stream file, for example There’s options like including a Go To ROM command, including Execute if that’s applicable for that file format Again, all that is under the Options for each individual file format So the main thing is hit the Browse, pick an output directory If you want to change any of the defaults, you can Check the files that you want or don’t want They’re all checked by default Hit Create image files, and then you’ve got exactly what you need in terms of golden images suitable for your production environment I want to mention a little bit about OTP– One Time Programming– support for the ROM based gauges that use OTP for configurability There is a flash stream format called OTFS, or OT.FS files, specifically for the one-time programmable memory Again, it’s a flash stream format So you still see those raw commands that would go out– the bytes that would be written in a raw fashion to your I2C interface– I-Squared-C interface And we do provide a separate tool called Smart Flash that you can use, that will detect the hardware let you load one of these OT.FS files and program the chip

What’s different about programming OTP is the OTP gauge is generally in ROM-based So you’re not programming firmware, but your programming the configuration You can alter the default configuration What’s significant about programming OTP is in your production environment you’ve got to apply a programming voltage for a particular amount of time within a certain tolerance Of course, documentation can walk you through that This tool specifically prompts you, OK, now apply the programming voltage– now remove it, and so on One other thing that’s important about breaking out the Smart Flash itself as a separate tool is this is something that we can make available to you in terms of source code So if you’d like to integrate the OTP programming process into your own toolset for production, this is a C# tool from the ground up, communicating through an adapter, inputting the FS format and programming it to a gauge through one of those adapters So there’s C# source code that will be available to you if you want to do integration with that And I’ll mention just off side, this is also a command line tool So if you can pass in FS file as a command line parameter, and it simply runs as a command line tool if you want to just use it in your production environment in a script-driven way But if you run Smart Flash without any command line parameters, then it pops up as a GUI So it works both ways The function of bqProduction is that it’s a tool that’s more suitable to a production intent, or production environment, that’s built off the same hardware communication framework as all of the other tools So it’s robust, it’s extensible, it supports many of our gauges particularly multi-cell You need an MTester board for most of the functionality And we do support both EV2300 and now we support EV2400 The latest versions of the bqProduction will do that And unless you’ve got specific questions later, I would say we probably will defer to the following program in terms of production toolset, before I get more into that Really briefly on chargers– because I focused a lot on gauges So for chargers, again, we get to read and write all the registers through the workspace associated with the charger product line in bqStudio You can save all the register contents We’ve added logging support recently You can send commands manually using an advanced com plug-in– so, same with gauges If you want to use low level comm for chargers, you can do that Select your target address There’s 8- and 16-bit charger register support– recently added 16-bit support for that And again support for I2C and SMBus on chargers, and then watchdog support Just to real quickly give you an idea of the default charger view, on the left you see the registers themselves, the address, and the current value in both hexadecimal and a binary representation On the right is a more usable, user friendly implementation of what’s in that register So a value of 82, in this case, corresponds to 4.25 volts in the battery voltage control register So you can see, you can change it anywhere and the value changes So there’s a drop down here for allowable values that allow you to update the contents of the registers This toolbar up at the top provides all of the core functionality So you can save or load the registers You want to save a configuration file, put in another charger and then load that with same configuration you can do that You can start logs You can read all the registers, write the registers, and so on There’s an auto read functionality that’s very similar to scan on the registers plug-in for gauges Update mode just determines the behavior of the GUI Immediate mode means as you make a change, it’s actually written to the charger, and so on And then this is how you would select your target address for the chargers that allow you have to have options to specify the charger address there There’s also a button at the very far right here on the toolbar that says field view If you switch to field view, it gives you a view that’s kind of more in keeping with all of the available fields associated with those registers So it’s a more kind of intuitive way of interacting with the contents if you don’t want to look up, OK, this register in this address has this particular value This is a way to specify here– you know, charge current, input current limit, sys V-out and so on– you know, with the allowable options checked And then basically your configuration space is updated on the right to reflect all of your selections in the left panel So again, just another way to get at communicating with the chargers and configuring it in the way that you’d like Finally, useful links Again, bqStudio– I gave you the link already. bqProduction– you’ll will hear more about it shortly– is available also at If you want to use bqProduction, you’ll need an MTester board, most likely So you can find out about that at I didn’t do a deep dive into the GDK, which was the single-cell version– kind of the first version of what we think of as the BMDK today There is support for that built into the bqStudio If you use the GDK, there’s a suite

of tools available to help do automation and chemistry ID at selection and that sort of thing using the GDK as well If you’re using the EV2300, please switch to the EV2400 But if you’re using a EV2300 in a 64-bit environment, you’ll need a standalone driver for that, and then the generic like for battery management tools